[英]Factory in angularJS
我試圖在angularJS中使用工廠,但是我沒有按預期工作。
這是我的控制器:
as.controller('Test', ['testFactory', function($scope, $http, $rootScope)
{
$http.get($rootScope.appUrl + '/nao/test/test')
.success(function(data, status, headers, config) {
$scope.test = data;
});
$scope.form = {};
$scope.submitForm = function(isValid) {
if(isValid)
{
testFactory.testFactoryMethod(function($http) {
$scope.test = data;
});
}
};
}]);
如您所見,我將工廠“包括”到控制器中。
這是我的工廠:
.factory('testFactory', function($http) {
return {
testFactoryMethod: function(callback) {
return $http('http://127.0.0.1:81/test/test', data).success(function(data) { callback(data);
});
}
};
});
運行此命令時,出現以下錯誤消息:
Error: $http is undefined
@http://127.0.0.1:82/nao/js/controllers.js:82:3
誰能幫助我?
發生這種情況是因為Angular $ injector 。 當您將數組作為.controller
第二個參數提供時, $injector
嘗試查找其名稱上列出的所有依賴項,然后將它們注入到數組的最后一個元素(必須是function
)中,因此在您的情況下,這是怎么了:
'testFactory' -> $scope
undefined -> $http
undefined -> $rootScope
您的代碼應如下所示:
as.controller('Test', ['$scope', '$http', '$rootScope', 'testFactory', function($scope, $http, $rootScope, testFactory)
{
// ...
...或者像這樣:
as.controller('Test', function($scope, $http, $rootScope, testFactory)
{
// ...
編輯:正如@ sp00m所述,如果要丑化(最小化)代碼,則不應使用第二個示例,因為uglifier算法會將這些標識符替換為:
function(a, b, c, d)
然后,AngularJS將不再能夠找到那些依賴關系,而第一個示例將如下所示:
['$scope', '$http', '$rootScope', 'testFactory', function(a, b, c, d)
哪個有效,因為您明確告訴Angular它必須注入哪些依賴項。
控制器中的依賴項存在問題。 您在數組中具有字符串名稱的名稱與工廠函數的參數不匹配。
這應該工作:
as.controller('Test', ['$scope', '$http', '$rootScope', 'testFactory', function($scope, $http, $rootScope, testFactory)
{
$http.get($rootScope.appUrl + '/nao/test/test')
.success(function(data, status, headers, config) {
$scope.test = data;
});
$scope.form = {};
$scope.submitForm = function(isValid) {
if(isValid)
{
testFactory.testFactoryMethod(function($http) {
$scope.test = data;
});
}
};
}]);
您應該這樣聲明您的控制器
as.controller('Test', ['$scope', '$http', '$rootScope', 'testFactory', function($scope, $http, $rootScope, testFactory)
{
....
}
我認為您忘記了$ http.post:
$ http(url,data)應該是$ http.post(url,data)
正如其他人之前所說的,您需要將testFactory注入控制器函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.