如何将angularJS服务调用到未包含在控制器中的控制器中?

时间:2016-03-24 20:19:11

标签: angularjs

如何将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

2 个答案:

答案 0 :(得分:1)

仅使用[]调用模块一次,之后只使用模块名称。

// Creates the module
var app = angular.module("myApp", []);

// call the same module from your other files
var app = angular.module("myApp"); // no []

See the documentation here.

[]的坚果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变量