Javascript 角度模块依赖项注入未按预期工作
因此,我在管理节点应用程序的依赖项方面遇到了问题。结构如下 app.jsJavascript 角度模块依赖项注入未按预期工作,javascript,angularjs,node.js,Javascript,Angularjs,Node.js,因此,我在管理节点应用程序的依赖项方面遇到了问题。结构如下 app.js var app = angular.module('myApp', ['myController', 'myFactory', 'rzModule', 'chart.js', 'myService', 'selector']); myController.js var app = angular.module('myApp', ['chart.js', 'rzModule', 'selector']); app.cont
var app = angular.module('myApp', ['myController', 'myFactory', 'rzModule', 'chart.js', 'myService', 'selector']);
myController.js
var app = angular.module('myApp', ['chart.js', 'rzModule', 'selector']);
app.controller('myController', function($scope, $http, $rootScope, myFactory, mySecondService){ ... }]);
myFactory.js
angular.module('myApp').factory('myFactory', function($http, $rootScope){ ... });
myService.js
angular.module('myApp').service('myService', function($http){...});
上述结构正常工作,应用程序按预期运行。但是我不认为我在myController.js中所做的是正确的,因为我现在想添加另一个依赖项,我不知道如何在应用程序不崩溃的情况下这样做
问题1:在上面的myController.js中,我想我是在创建一个新模块,而不是重用app.js中的模块,对吗?如果是这样,将3个依赖项内联移动(如以下所示)将导致“myController不可用”:
为什么这不起作用?根据法律规定,它应该这样做
问题2:我想添加到myController中。说明说我应该将'angularmonent'
作为依赖项添加到app.js中,然后将'moonet'
添加到控制器依赖项中。如果我这样做并像问题1那样添加'moment'
内联,我会再次遇到“myController不可用”错误。正如Satpal所说
app.controller('myController',['chart.js', 'rzMo
这是一条路要走,或者说写这篇文章的更简洁的方式是这样做
angular.module('myApp').controller('myController');
myController.$inject = ['$scope', '$http', '$rootScope', 'myFactory', 'mySecondService']
function myController($scope, $http, $rootScope, myFactory, mySecondService){}
myController
无法与修复一起使用的原因是,现在您没有覆盖主应用程序模块,它正在寻找一个名为myController
的模块,但找不到该模块(因为它是控制器而不是模块)。因此,从var-app=angular.module('myApp',['myController'
我建议您看一看,它有助于编写干净的代码。正如Satpal所说
app.controller('myController',['chart.js', 'rzMo
这是一条路要走,或者说写这篇文章的更简洁的方式是这样做
angular.module('myApp').controller('myController');
myController.$inject = ['$scope', '$http', '$rootScope', 'myFactory', 'mySecondService']
function myController($scope, $http, $rootScope, myFactory, mySecondService){}
修复程序无法使用myController的原因是,现在您没有覆盖主应用程序模块,它正在寻找一个名为myController的模块,但找不到该模块(因为它是控制器而不是模块)。因此,请从var app=angular.module('myApp')中删除'myController'
,['myController'
我建议您查看一下它,它有助于编写干净的代码。Ans 1:
是的,在第二种情况下,您尝试再次定义它。
要定义应用程序,请使用:
angular.module('myApp', [..list of dependancies...]);
现在,如果要在上一个模块上定义控制器,请使用
angular.module('myApp').controller();
现在是你的3个依赖项,将它们移动到你定义应用程序的顶部
回答2:你必须将angularMoment注入你的应用程序,将moment注入你的控制器
在angular中处理依赖注入的最佳方法是使用$inject
angular.module('myApp').controller('myController', myController);
myController.$inject = ['moment','$scope', '$http', '$rootScope', 'myFactory', 'mySecondService']
function myController(moment, $scope, $http, $rootScope, myFactory, mySecondService){
//your controller code.
}
或者你也可以试试下面的方法
angular.module('myApp').controller('myController',['moment','$scope', '$http', '$rootScope', 'myFactory', 'mySecondService', function myController(moment, $scope, $http, $rootScope, myFactory, mySecondService){
//your controller code.
}]);
以下方法也适用,但不推荐:
angular.module('myApp').controller('myController',function myController(moment, $scope, $http, $rootScope, myFactory, mySecondService){
//your controller code.
});
答复1:
是的,在第二种情况下,您尝试再次定义它。
要定义应用程序,请使用:
angular.module('myApp', [..list of dependancies...]);
现在,如果要在上一个模块上定义控制器,请使用
angular.module('myApp').controller();
现在是你的3个依赖项,将它们移动到你定义应用程序的顶部
回答2:你必须将angularMoment注入你的应用程序,将moment注入你的控制器
在angular中处理依赖注入的最佳方法是使用$inject
angular.module('myApp').controller('myController', myController);
myController.$inject = ['moment','$scope', '$http', '$rootScope', 'myFactory', 'mySecondService']
function myController(moment, $scope, $http, $rootScope, myFactory, mySecondService){
//your controller code.
}
或者你也可以试试下面的方法
angular.module('myApp').controller('myController',['moment','$scope', '$http', '$rootScope', 'myFactory', 'mySecondService', function myController(moment, $scope, $http, $rootScope, myFactory, mySecondService){
//your controller code.
}]);
以下方法也适用,但不推荐:
angular.module('myApp').controller('myController',function myController(moment, $scope, $http, $rootScope, myFactory, mySecondService){
//your controller code.
});
所以在回答你的问题之前 随着angularjs的继续,模块需要注入到应用程序中,而不是注入到控制器中,因此任何要包含的模块都需要注入到应用程序中
var app = angular.module('myApp', [<all modules comma separated>]);
这应该是可行的,使用它并不意味着你正在创建任何新的应用程序
问题2
var app = angular.module('myApp', ['angularMoment']);
app.controller('myController', ['moment', function(...)
像这样,您可以使用力矩对象。所以在回答您的问题之前 随着angularjs的继续,模块需要注入到应用程序中,而不是注入到控制器中,因此任何要包含的模块都需要注入到应用程序中
var app = angular.module('myApp', [<all modules comma separated>]);
这应该是可行的,使用它并不意味着你正在创建任何新的应用程序
问题2
var app = angular.module('myApp', ['angularMoment']);
app.controller('myController', ['moment', function(...)
像这样,你可以使用力矩对象。
app.controller('myController',['chart.js','rzMo…
是继续的方式,文件的顺序是什么?@Satpal这是我的猜测,但如上所述,它导致控制器不可用。为什么在angular.module中使用myController
('myApp'
decelleration?@ffritz)这是因为您需要从这里删除'myController'
var app=angular.module('myApp',['myController'
所以服务/工厂不应包含在应用程序依赖项中?app.controller('myController',),['chart.js','rzMo…
是继续的方式,文件的顺序是什么?@Satpal这是我的猜测,但如上所述,它导致控制器不可用。为什么在angular.module中使用myController
('myApp'
decelleration?@ffritz)这是因为您需要从这里删除'myController'
,var-app=angular.module('myApp',['myController'
所以服务/工厂不应该包含在应用程序依赖项中?谢谢,但是首先我认为注入应该是这样的:myController.$inject=['$scope']
。第二,这导致名为“myController”的控制器未注册。
对我来说。@ffritz你说得对,我从你的代码中复制时忘了更改它。我认为Lalit Sachdeva的答案是更好的解释tbh。谢谢,但首先我认为注入应该是这样的:myController.$inject=['$scope'…]
。第二,这导致名为“myController”的控制器未注册。
对我来说。@ffritz你说得对,我从你的代码中复制时忘了更改它。我想Lalit Sachdeva