Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了grunt等工具uglify angularjs 控制器注入失败的问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

问题引入

文件是csp.js. 使用grunt的uglify压缩后的文件是csp.min.js.
其中,csp.js的结构如下:

var cmsApp = angular.@H_657_11@module('cmsApp',['cmsController','cmsservice','cmsDirective','oc.lazyLoad']);
angular.@H_657_11@module('cmsController',[]);
angular.@H_657_11@module('cmsservice',[]);
angular.@H_657_11@module('cmsDirective',[]);

angular.@H_657_11@module('cmsController').controller('mainCtrl',function ($scope,$rootScope,$interval,$timeout,$ocLazyLoad,mainservicE) {
    //新界面定义变量
    $scope.priMaryR_292_11845@enu = 0;
    $scope.priMaryR_292_11845@enuEnum = {};
    $scope.showSecondarymenu = false;
    $scope.secondarymenuList = [];
    $scope.secondaryOpenMenuList = [];

    $scope.showMax = false;
    $scope.menuList = [];
})

在index.html中引入csp.js程序是可以运行的。但是引入csp.min.js则报错:
Error: [$injector:unpr]
我们知道这是:控制器注入失败的@L_874_2@。

引入min.js的意义

grunt等工具uglify angularjs 控制器注入失败的问题


可以看到压缩比率接近50%。一个成熟的网站,体积一般在M以上,这么高的压缩率是相当可观的。

解决的办法

1.问题产生的原因
angular控制器依赖注入编写有两种方式:

第一种:

angular.module('cmsController').controller('mainCtrl',['$scope','$rootScope','$interval','$timeout','$ocLazyLoad','mainservice',function ($scope,mainservicE) {}])

第二种:

angular.module('cmsController').controller('mainCtrl',mainservicE) {})

在非压缩形式下,两种方式都是正确的。实际上最开始我们也没很明白这两种写法的区别,为了简便,很多人直接用了后者的写法。

正是这种方式,导致了压缩后,构造函数参数也被压缩,依赖注入无法正确找到服务器。因此,全部统一换成第一种方式,用数组方式构造控制器,把注入依赖放入到一个数组中,该数组最后一个元素是控制器的方法函数

注意:
除了控制器,service也需要写成这种形式:

angular.module('cmsservice').factory('mainservice',['$http',function($http) {
    var service = {};
 }])

大佬总结

以上是大佬教程为你收集整理的grunt等工具uglify angularjs 控制器注入失败的问题全部内容,希望文章能够帮你解决grunt等工具uglify angularjs 控制器注入失败的问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。