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

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

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


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

资源包定义:

backend/assets/AppAsset.php

<?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' => 'api\assets\AppAsset']);
    }
    
   //定义按需加载css方法,注意加载顺序在最后
    public static function addCss($view, $cssfile) {
        $view->registerCssFile($cssfile, [AppAsset::className(), 'depends' => 'api\assets\AppAsset']);
    }
 }
视图中如何使用:

<?php
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,该如何做?

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'], \yii\web\View::POS_END); ?>
<?php $this->registerJsFile('@web/inspinia/js/inspinia.js',['depends'=>['yii\bootstrap\BootstrapAsset']]) ?>


另一种方式:


$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' => 'api\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'=>['api\assets\AppAsset']]);

 $this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['api\assets\AppAsset']]);
//$this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['api\assets\AppAsset'],'position'=>$this::POS_HEAD]);
//以上定义两种有点区别,见下图
加载在body区

加载在head中






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值