zoukankan      html  css  js  c++  java
  • Yii2 灵活加载js、css

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

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

    资源包定义:

    backend/assets/AppAsset.PHP

    [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',  
            ];  
    [php]
        //全局JS  
        public $js = [  
            'js/jquery-2.1.1.js'  
        ];  
    [php] 
            //依赖关系  
            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']);  
            }  
         }  

    视图中如何使用:

    [php] 
        <?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,在页面中单独写样式:

    [php]
        $cssString = ".gray-bg{color:red;}";  
        $this->registerCss($cssString);  

    2,在页面中单独写JS(使用数据块)

    [php]
        <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'=>['yiiootstrapBootstrapAsset']]) ?>  

    另一种方式:

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

    在视图中引入不是定义在全局里的CSS或JS。

    分别有两种方法:

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

    如上面代码己定义:

    [php] 
        //定义按需加载JS方法,注意加载顺序在最后  
            public static function addScript($view, $jsfile) {  
                $view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'apiassetsAppAsset']);  
            }  

    视图中使用如下:

    [php]
        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,不需要在资源包管理器中定义方法,只要在视图页面直接引入即可

    [php] 
        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中


  • 相关阅读:
    进程状态
    VMware虚拟机的三种联网方法及原理
    关于C++迭代器失效
    头文件:limits.h、float.h
    正则表达式之一:元符号
    MYSQL之批量插入数据库
    PHP之如何判断数字(数字字符串不算)
    使用Process Monitor来得到程序运行参数
    Abusing the C preprocessor
    1+1还是1+1=2?
  • 原文地址:https://www.cnblogs.com/peteremperor/p/6923853.html
Copyright © 2011-2022 走看看