当前位置: 首页 > 面试题库 >

使用Grunt uglify的Angularjs缩小导致js错误

时经纬
2023-03-14
问题内容

在angularjs中,我们将参数作为依赖项注入传递。例如,

function checkInCtrl ($scope, $rootScope, $location, $http){
…..
….
}

所以当它缩小时,它变成

function checkInCtrl(a,b,c,d){
}

现在,a,b,c,d将不会被角度和整个代码分别解释为$ scope,$ rootScope,$ location和$
http无法工作。为此,angularjs提供了一种解决方案,即

checkInCtrl.$inject = ['$scope', '$rootScope', $location', '$http'];

我们可以使用上述语法注入不同的依赖项。直到我没有使用一些自定义的角度服务作为依赖项,此方法都有效。例如

如果我有类似的东西

function checkInCtrl ($scope, $rootScope, $location, $http){
…..
….
}

它适用于给定的解决方案,但是如果我有类似的东西

function checkInCtrl ($scope, $rootScope, $location, $http, customService){
…..
….
}

其中,customService类似于

angular.module(customService, ['ngResource'])
                .factory('abc', function($resource) {
                                return $resource('/abc');
                })

它的缩小版本无法正确地用angular解释。

由于我们必须开始进行项目开发活动,因此我们无法花费足够的时间来研究问题,因此开始使用控制器而没有减少它们。那么第一个问题是角度是否存在这样的问题,还是我犯了一些错误,并且由于这个原因而无法正常工作?如果存在这样的问题,该如何解决?


问题答案:

您必须使用基于字符串注入的语法,以确保缩小版本指向良好的依赖关系:

function checkInCtrl ($scope, $rootScope, $location, $http){}

变成:

['$scope', '$rootScope', '$location', '$http', function checkInCtrl ($scope, $rootScope, $location, $http){}]


 类似资料:
  • 我试图以以下方式使用Jersey的@BeanParam注释: 这是我的豆子: 这是需要使用它的资源方法: 现在我想使用一个单元测试来测试它,该单元测试使用以下url向测试服务器发送超文本传输协议请求: GET超文本传输协议://path_to_resource?参数1 我的问题是,这导致了415响应,泽西打印了这条消息: 找不到Java类BeanParamModel、Java类型类BeanPara

  • 问题内容: 我正在阅读 http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs- dependency-injection.html ,事实证明,如果您缩小JavaScript的大小,angularjs依赖项注入会出现问题,我想知道是否 你应该使用 总而言之,我认为第二个片段是针对angularjs的旧版本的,但是..

  • 在使用自动进行隐式转换时出错。 使用int变量捕获v.size()的返回是可以的,但自动会出现问题。编译器错误确实表明这是由于转换范围缩小所致。但我想从内存的角度理解这是如何发生的,为什么auto不允许它这样做,而正常转换是可以的 由于以下行自动大小=int{v.size()}导致的错误; 主要的cpp:In函数“int main()”:main。cpp:11:27:错误:“v.std::vect

  • 问题内容: 有最紧迫的时间试图弄清楚为什么缩小不起作用。 我已经通过数组对象在网络上根据大量建议在函数之前注入了我的提供者,但仍然是“未知提供者:aProvider <-a” 定期: 缩小: 任何建议将是必须的! 问题答案: AndrewM96的建议是正确的。 对齐和空格对于Uglify和Angular都很重要。

  • 问题内容: 我还有一个关于缩小的问题。这次是因为$ scope服务传递给指令的控制器。参见下面的代码: 如果我注释掉控制器部分,那么它可以正常工作。 如您所见,我已将数组声明用于指令,因此即使缩小后,Angular也知道$ dialog服务。但是我应该如何为控制器上的$ scope服务执行此操作? 问题答案: 您需要声明一个控制器,如下所示: 完整示例如下: @Sam提供的解决方案可以使用,但是这

  • 我尝试将Codeigniter与AngularJS路由一起使用,它正在工作,但我需要不使用散列。我使用以下代码: 但当我刷新页面时,跳转到404。