一、资源包定义

Yii2对于CSS/JS 管理,使用AssetBundle资源包类。

创建如下:

backend/assets/AppAsset.php

namespace backend\assets;

use yii\web\AssetBundle;

/**

* @author chan <maclechan@qq.com>

* @since 2.0

*/

class AppAsset extends AssetBundle

{

public $basePath = '@webroot';

public $baseUrl = '@web';

//全局CSS

public $css = [

'css/animate.css',

'css/style.min.css',

];

//全局JS

public $js = [

'js/jquery-2.1.1.js'

];

//依赖关系

public $depends = [

'yii\web\YiiAsset',

'yii\bootstrap\BootstrapAsset',

];

//定义按需加载JS方法,注意加载顺序在最后

public static function addScript($view, $jsfile) {

$view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'backend\assets\AppAsset']);

}

//定义按需加载css方法,注意加载顺序在最后

public static function addCss($view, $cssfile) {

$view->registerCssFile($cssfile, [AppAsset::className(), 'depends' => 'backend\assets\AppAsset']);

}

}

二、视图使用:

1. 视图(或布局)使用全局CSS/JS

use yii\helpers\Html;

use backend\assets\AppAsset;

use backend\widgets\Alert;

/* @var $this \yii\web\View */

/* @var $content string */

AppAsset::register($this);

查看源文件,看清CSS和JS的加载顺序

可以看出以此顺序为:依赖关系 -> 自定义全局CSS/JS

如果,某个视图需要单独引入一个CSS/JS,并且,在页面中还要写些CSS/JS,该如何做?

2. 在页面中单独写样式

$cssString = ".gray-bg{color:red;}";

$this->registerCss($cssString);

3. 在页面中单独写JS(使用数据块)

<div id="mybutton">点我弹出OK</div>

<?php $this->beginBlock('test') ?>

$(function($) {

$('#mybutton').click(function() {

alert('OK');

});

});

<?php $this->endBlock() ?>

<?php $this->registerJs($this->blocks['test'], \yii\web\View::POS_END); ?>

或者:

<?php

$this->registerJs(

'$("document").ready(function(){

$("#login-form").validate({

errorElement : "small",

errorClass : "error",

rules: {

"AgNav[nav_cn]": {

required: true,

},

},

messages:{

"AgNav[nav_cn]" : {

required : "此字段不能为空.",

},

}

});

});'

);

?>

4.视图中引入CSS/JS文件

然后再说下在视图中如何引入一个CSS/JS文件(不是定义在全局里的CSS或JS)

分别有两种方法:

方法1

在资源包管理器里面定义一个方法,然后在视图中注册即可(推荐使用这种)

如上面代码己定义:

//定义按需加载JS方法,注意加载顺序在最后

public static function addScript($view, $jsfile) {

$view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'backend\assets\AppAsset']);

}

视图中使用如下

AppAsset::register($this);

//只在该视图中使用非全局的jui

AppAsset::addScript($this,'@web/js/jquery-ui.custom.min.js');

//AppAsset::addCss($this,'@web/css/font-awesome/css/font-awesome.min.css');

查看下源码,特别的注意下,加载的顺序,是我们想要的结果

此外注意:在上面的addScript方法中,如果没有 ’depends‘=>’xxx‘ ,此处加载的顺序将会颠倒。

方法2

不需要在资源包管理器中定义方法,只要在视图页面直接引入即可

AppAsset::register($this);

//css定义一样

$this->registerCssFile('@web/css/font-awesome.min.css',['depends'=>['backend\assets\AppAsset']]);

$this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['backend\assets\AppAsset']]);

//如下position是让定义CSS/JS出现的位置

//$this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['backend\assets\AppAsset'],'position'=>$this::POS_HEAD]);

原文转载 自 http://www.wtoutiao.com/p/1f6qEX6.html

转载 yii2-按需加载并管理CSS样式/JS脚本的更多相关文章

  1. yii2-按需加载并管理CSS样式/JS脚本

    原文地址:https://segmentfault.com/a/1190000003742452

  2. yii2.0 如何按需加载并管理CSS样式及JS脚本

    链接:http://www.yiichina.com/tutorial/399 (注:以下为Yii2.0高级应用测试) Yii2.0对于CSS/JS 管理,使用AssetBundle资源包类. 视图如 ...

  3. Yii2按需加载图片怎么做?

    按需加载图片应该用 jQuery LazyLoad 图片延迟加载按需加载文件夹应该用 Yii::import

  4. 转:按需加载html 图片 css js

    按需加载是前端性能优化中的一项重要措施,按需加载是如何定义的呢?顾名思义,指的是当用户触发了动作时才加载对应的功能.触发的动作,是要看具体的业务场景而言,包括但不限于以下几个情况:鼠标点击.输入文字. ...

  5. 关于前端本地压缩图片,兼容IOS/Android/PC且自动按需加载文件之lrz.bundle.js

    一.介绍说明主要特点: ①在前端压缩好要上传的图片可以更快的发送给后端,因此也特别适合在移动设备上使用. ②兼容IOS/Android,修复了IOS/Android某些版本已知的BUG. ③按需加载文 ...

  6. 用javascript预加载图片、css、js的方法研究

    预加载的好处可以让网页更快的呈现给用户,缺点就是可能会增加无用的请求(但图片.css.js这些静态文件可以被缓存),如果用户访问的页面里面的css.js.图片被预加载了,用户打开页面的速度会快很多,提 ...

  7. YII2-按需加载并管理静态资源(CSS,JS)

    参考博客: https://segmentfault.com/a/1190000003742452#articleHeader5

  8. 判断不同浏览器,加载不同的css和js文件

    在低版本的IE中,条件注释还有效果,但是在ie9,10,11浏览器中,条件注释不起作用. 在网上找了个校验ie的方法. function isIE(){  if (window.ActiveXObje ...

  9. Node.js 加载静态资源css,js等不显示问题的解决方法

    一,原因 1,没有响应到css等文件 2,响应类型是由文件的后缀名决定 (1)html的请求头 Content-Type : text/html ; charset=utf-8 (2) CSS的请求头 ...

随机推荐

  1. c++函数内部可以返回函数内部定义的指针 但是不能返回函数内部定义的数组

    1.返回数组 // demo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> char *m ...

  2. Codeforces Round #211 (Div. 2)

    难得一次比赛能够自己成功A掉四个题: A题:水题,模拟一下就行: #include <iostream> #include <cstdio> using namespace s ...

  3. zoj 3716

    题目给我们四个点,要求我们以这四个点为圆心,形成四个相切的圆: 求他们的半径和: 首先我们从他们中间选出三个点,以这三个点为圆心的三个圆最大可以两两互相相切: 证明:假设这三个圆的半径分别为a,b,c ...

  4. require backbone 移动

    http://www.gafish.net/archives/1422 http://www.w3ctech.com/2012/mobile/schedule http://cavenfeng.ite ...

  5. spring mvc 使用及json 日期转换解决方案

    http://blog.csdn.net/z69183787/article/details/40375479

  6. HDU2167+状态压缩DP

    状态压缩dp 详见代码 /* 状态压缩dp dp[ i ][ j ]:第i行j状态的最大和 dp[i][j] = max( dp[i-1][k]+sum[i][j] ); 题意:给定一个N*N的方格, ...

  7. HDU4521+线段树+dp

    题意:在一个序列中找出最长的某个序列.找出的序列满足题中的条件. 关键:对于 第 i 个位置上的数,要知道与之相隔至少d的位置上的数的大小.可以利用线段树进行统计,查询.更新的时候利用dp的思想. / ...

  8. DHTMLX 前端框架 建立你的一个应用程序 教程(六)-- 表格加载数据

    从数据库加载数据 这篇我们介绍从MySQL数据库中加载数据到表格 我们使用 MySql的数据库dhtmlx_tutorial 和表contacts 示例使用的是PHP平台和dhtmlxConnecto ...

  9. *[codility]Number-of-disc-intersections

    http://codility.com/demo/take-sample-test/beta2010/ 这题以前做的时候是先排序再二分,现在觉得没有必要.首先圆可以看成线段,把线段的进入作为一个事件, ...

  10. 用U盘安装系统

    下述的前提就是:如果你想要装win7,win8系统的话,你需要准备一个大于等于4G的U盘,但是如果你想装XP,Ubuntu等小系统就可以只要1G的U盘就行了,温馨提示,记得将U盘里的重要东西移走,因为 ...