Angularjs - 无参考注入工厂

时间:2016-02-09 11:46:15

标签: javascript angularjs angularjs-service angularjs-factory

我有以下代码:

main.js

angular.controller('myCtrl', function($scope, $rootScope) {
    $scope.name = "Bob";
}

myservices.js

angular.factory('myService', function($http) {

  var myService = {
    async: function(params) {
      // $http returns a promise, which has a then function, which also returns a promise
      var promise = $http.get("http://myws/user/info/"+params).then(function (response) {
        // The then function here is an opportunity to modify the response
        console.log(response);
        // The return value gets picked up by the then in the controller.
        return response.data;
      });
      // Return the promise to the controller
      return promise;
    }
  };
  return myService;
});

如何在myService中注入myCtrl?考虑到它们分为两个文件。

4 个答案:

答案 0 :(得分:1)

我们需要按顺序添加我们创建的所有脚本以运行此角度,请注意顺序:

<script src="angular.js"></script>
<script src="main.js"></script>
<script src="myservices.js"></script>

main.js应如下所示:

var app = angular.module("MyModule", []);
app.controller('myCtrl', function($scope, $rootScope, myService) { /* implementation */})

services.js应如下所示:

app.factory('myService', function($http) { /* implementation */});

所以在我们的main.js中,我们正在创建一个模块来附加我们所有的服务,工厂,提供者,值,常量,控制器和指令。它还允许我们将配置和运行阶段功能放在。

模块通过以下方式实例化:

angular.module("MyModule", []);

我们提供其他依赖模块的第二个参数

如果我们需要,在使用javascript模块的情况下,我们可以再次询问模块的角度:

var app = angular.module("MyModule");

答案 1 :(得分:1)

以下是您需要做的几件事。

  1. 它们应该属于相同/不同的角度<ion-view> <div class="bar bar-header item-input-inset"> <label class="item-input-wrapper"> <i class="icon ion-ios-search placeholder-icon"></i> <input type="search" placeholder="Search"> </label> <button class="button button-clear"> Cancel </button> </div> <ion-content> ... (如果它有不同的模块,那么你已注入主模块使用它)。
  2. 您需要使用module将组件绑定到该组件,以便该模块中的服务可用。
  3. <强>代码

    angular.module('myApp')

答案 2 :(得分:1)

  1. 确保文件都已实际加载。如何做到这一点取决于您,也许您正在使用require()的某些实现,或者只是将HTML中的所有文件列为<script>标记。

  2. 澄清您想要的模块结构。两者都应该是同一模块的一部分,还是它们应该是独立的模块?

    • 相同模块:一个文件需要声明模块,另一个需要扩展它:

      angular.module('Foo', [])  // declares new module
          .controller(..)
      
      angular.module('Foo')      // extends existing module
          .factory(..)
      
    • 不同的模块:

      angular.module('Foo', [])  // declares new module
          .factory(..)
      
      angular.module('Bar', ['Foo'])  // declares new module
          .controller(..)             // and imports other module
      
  3. 注入控制器:

    .controller('myCtrl', function ($scope, myService) ..
    

答案 3 :(得分:1)

您可以在控制器中注入服务

像:

main.js:

angular.module('myApp', []).controller('myController', ['$scope', 'myService',
    function ($scope, myService) {

    }
]);

myService.js:

angular.module('myApp').factory('myService', function($http) {
     //service code
});

对于不同的文件但是相同的模块然后确保在使用之前加载文件。