如何将angularJS服务调用到未包含在控制器中的控制器中?
productCtrl.js
var app = angular.module('myApp',[]);
app.controller('productCtrl',['$scope','productService', function ($scope,campaignService)
{
$scope.getLocations = function() {
productService.getPorduct(response,status);
}
}]);
productService.js
var app = angular.module("myApp", []);
app.service('productService', ['ajaxService', function (ajaxService) {
this.getPorduct = function (successFunction, errorFunction) {
ajaxService.AjaxGet("http:location.com/product#?clientid=10",
successFunction, errorFunction);
};
}]);
ajaxService.js
var app = angular.module("myApp", []);
app.service('ajaxService', ['$http', 'blockUI', function ($http, blockUI) {
this.AjaxGet = function (route, successFunction, errorFunction) {
blockUI.start();
setTimeout(function () {
$http({ method: 'GET', url: route }).success(function (response, status, headers, config) {
blockUI.stop();
successFunction(response, status);
}).error(function (response) {
blockUI.stop();
errorFunction(response);
});
}, 1000);
}
}]);
当我访问控制器以从url获取结果时,我收到以下错误
angular.js:13294 Error: [ng:areq] Argument 'productCtrl' is not a function, got undefined
答案 0 :(得分:1)
仅使用[]调用模块一次,之后只使用模块名称。
// Creates the module
var app = angular.module("myApp", []);
// call the same module from your other files
var app = angular.module("myApp"); // no []
在[]
的坚果shell中创建一个新实例,而不[]
检索现有/已创建的实例。请确保您的脚本已订购,因此第一次调用始终使用[]
参数。
答案 1 :(得分:0)
确保您应该定义具有相同名称的角度module
,每个应用程序只应创建一次&然后利用该模块将组件扩展到它。
在这里,我可以看到您创建模块的三个地方,如
var app = angular.module("myApp", []);
应该只创建一次,然后像angular.module("myApp")
一样使用,你想在此模块中添加组件
productService.js
& ajaxService.js
应该使用productCtrl.js
初始创建的模块(假设首先加载productCtrl.js
)。您需要更改productService.js
&来自
ajaxService.js
代码
var app = angular.module("myApp", []);
到
var app = angular.module("myApp");
更好地从以后加载的其他js文件中删除var app = angular.module("myApp", []);
这一行,然后他们将使用已加载app
模块的myApp
变量