一、资源包定义

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. Jquer学习

    1:什么是Jquery 2:jquery的例子 3:后记

  2. centos7和windows7双系统安装

    前些天安装了双系统(centos7+win7),其实网上关于这类的教程很多,这篇日志也只是针对本人安装过程中遇到的一些问题进行说明.我是按照先安装win7再安装centos7的顺序. 1.关于分区: ...

  3. [HDOJ - 5282] Senior's String 【DP】

    题目链接:BZOJ - 5282 题目分析 LCS 就是用经典的 O(n^2) DP 解决,f[i][j] 表示 x 串前 i 个字符与 y 串前 j 个字符的 LCS 长度. f[i][j] = m ...

  4. [转载]MongoDB学习 (六):查询

    本文地址:http://www.cnblogs.com/egger/archive/2013/06/14/3135847.html  欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 本文将介绍操作符的使用 ...

  5. spring+mybatis的优缺点

    mybatis的优缺点: 优点: 1. 易于上手和掌握. 2. sql写在xml里,便于统一管理和优化. 3. 解除sql与程序代码的耦合. 4. 提供映射标签,支持对象与数据库的orm字段关系映射 ...

  6. java中path和classpath

    Path 路径,是java编译时需要调用的程序(如java,javac等)所在的地方; CLASSPATH的作用是指定查找类的路径:当使用java命令执行一个类(类中的main方法)时,会从class ...

  7. 先贴出代码C++ 中的单例模式

    先贴出代码,代码后面是讲解 自己编写的单例模式: #include <iostream> #include <stdio.h> #include <string> ...

  8. An error occurred while filtering resources

    一个比较恶心的问题.在使用过程中项目中有个错误 ,找不到原因.. An error occurred while filtering resources     Maven -> Update ...

  9. Xcode6新建的工程没有Frameworks文件夹了?!原来是这样

    http://stackoverflow.com/questions/24181062/default-frameworks-missing-in-xcode-6-beta They are impo ...

  10. json-lib反序列化时(JSONObject.toBean),时间类型为空的处理

    需求: 在我们的项目里希望JsonString传入日期类型值为空时,JSONObject.toBean时可以将Java对象的该日期属性设为null. 解决过程: json-lib反序列化Json字符串 ...