angular按需引入css文件

具体需求

做这个的原因是有个别页面整体不同于其他页面,如果css全部放在一个文件中比较乱,所以就想着单独放,但是我在页面中引入这个css文件后会出现一些问题:就是点击这个页面之后再点击别的页面有些样式会被覆盖,所以就想着能不能通过按需引入解决这个问题。

查找资料

angular-route-styles 这个项目地址解决了我的要求,不过也可以不引入他的文件改为直接把这个文件写在route.js文件中

.......
.when('/some/route/1', {
     templateUrl: 'partials/partial1.html', 
     controller: 'Partial1Ctrl',
     css: 'css/partial1.css'//引入方式就是这样
 })
 .......
 //主要是下面
.directive('head', ['$rootScope','$compile',
    function($rootScope, $compile){
        return {
            restrict: 'E',
            link: function(scope, elem){
                var html = '<link rel="stylesheet" ng-repeat="(routeCtrl, cssUrl) in routeStyles" ng-href="{{cssUrl}}" >';
                elem.append($compile(html)(scope));
                scope.routeStyles = {};
                $rootScope.$on('$routeChangeStart', function (e, next) {
                    if(next && next.$$route && next.$$route.css){
                        if(!angular.isArray(next.$$route.css)){
                            next.$$route.css = [next.$$route.css];
                        }
                        angular.forEach(next.$$route.css, function(sheet){
                            scope.routeStyles[sheet] = sheet;
                        });
                    }
                });
                $rootScope.$on('$routeChangeSuccess', function(e, current, previous) {
                    if (previous && previous.$$route && previous.$$route.css) {
                        if (!angular.isArray(previous.$$route.css)) {
                            previous.$$route.css = [previous.$$route.css];
                        }
                        angular.forEach(previous.$$route.css, function (sheet) {
                            scope.routeStyles[sheet] = undefined;
                        });
                    }
                });
            }
        };
    }
]);
注意

ng-app要放在html标签上

<html ng-app="RouteStylesApp" ng-controller="RouteStylesCtrl">
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值