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

链接:http://www.yiichina.com/tutorial/399

(注:以下为Yii2.0高级应用测试) Yii2.0对于CSS/JS 管理,使用AssetBundle资源包类。 视图如何按需加载CSS/JS ? 资源包定义: backend/assets/AppAsset.php namespace backendassets; use yiiwebAssetBundle; /** * @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 = [ 'yiiwebYiiAsset', 'yiiootstrapBootstrapAsset', ]; //定义按需加载JS方法,注意加载顺序在最后 public static function addScript($view, $jsfile) { $view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'apiassetsAppAsset']); } //定义按需加载css方法,注意加载顺序在最后 public static function addCss($view, $cssfile) { $view->registerCssFile($cssfile, [AppAsset::className(), 'depends' => 'apiassetsAppAsset']); } } 视图中如何使用: use yiihelpersHtml; use backendassetsAppAsset; use backendwidgetsAlert; /* @var $this yiiwebView */ /* @var $content string */ AppAsset::register($this); 查看源文件,看清CSS和JS的加载顺序 输入图片说明 输入图片说明 可以看出以此顺序为:依赖关系 -> 自定义全局CSS/JS 如果,某个视图需要单独引入一个CSS/JS,并且,在页面中还要写些CSS/JS,该如何做? 1,在页面中单独写样式: $cssString = ".gray-bg{color:red;}"; $this->registerCss($cssString); 2,在页面中单独写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'], yiiwebView::POS_END); ?> 在视图中引入不是定义在全局里的CSS或JS。 分别有两种方法: 方法1,在资源包管理器里面定义一个方法,然后在视图中注册即可(推荐使用这种) 如上面代码己定义: //定义按需加载JS方法,注意加载顺序在最后 public static function addScript($view, $jsfile) { $view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'apiassetsAppAsset']); } 视图中使用如下: 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'=>['apiassetsAppAsset']]); $this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['apiassetsAppAsset']]); //$this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['apiassetsAppAsset'],'position'=>$this::POS_HEAD]); //以上定义两种有点区别,见下图 加载在body区 输入图片说明 加载在head中 输入图片说明 博客源文地址: http://blog.csdn.net/maclechan/article/details/45803821
原文地址:https://www.cnblogs.com/jerrypro/p/6474755.html