Yii2.0灵活使用AppAssets管理CSS样式及JS脚本

转载:http://www.ithao123.cn/content-8302164.html

(注:以下为Yii2.0高级应用测试)

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

视图如何按需加载CSS/JS ?

资源包定义:

backend/assets/AppAsset.php

<?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',         'yiibootstrapBootstrapAsset',     ];       //定义按需加载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']);     }  }

视图中如何使用:

<?php 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); ?> <?php $this->registerJsFile('@web/inspinia/js/inspinia.js',['depends'=>['yiibootstrapBootstrapAsset']]) ?>

另一种方式:

 $this->registerJs(    '$("document").ready(function(){          $("#login-form").validate({             errorElement : "small",              errorClass : "error",             rules: {                      "AgNav[id]": {                          required: true,                      },             },             messages:{                    "AgNav[id]" : {                           required : "此字段不能为空.",                     },             }         });     });' );

 


在视图中引入不是定义在全局里的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中

发表评论

电子邮件地址不会被公开。 必填项已用*标注