在1.6角应用程序中注入服务

时间:2017-07-20 11:55:12

标签: javascript angularjs service

我对学习角度感兴趣,变得如此受欢迎,似乎需要依靠它。

我遇到了问题,我在角度1.0.x中做了一个小应用程序,但是为了扩展我对角度的了解,我决定为我的代码添加一个功能和复杂性。

阅读一些博客后,我修改了我的应用并将其更新为1.6角。所以我试图使用提供数据的服务,直到现在数据都是一个固定的json,它给了我几个trat并在屏幕上显示的对象。但是我有一些困难,我尝试的代码是下一个:

var app = angular.module('myApp', ['ngRoute']);
app.config(appConfig);
app.service('MyService', MyService);
app.controller('TestController', ['$http', TestController])

function appConfig($routeProvider, MyService) {
  $routeProvider.when('/', {
    templateUrl: './test.html',
    controller: 'TestController',
    controllerAs: 'my',
    resolve: {
      data: MyService.getData()
    }

  });
}

function TestController($http, MyService) {
  // some code
}


function MyService() {
  return {
    getData: getData
  }

  function getData() {
    var datos = [ << valid json >> ];
    return datos;
  }
}

但似乎我错误地注意了它所说的我和它的未知提供者的服务。

如果我退出对其工作的服务的引用,我必须以其他方式对数据进行设置,但它在没有服务的情况下工作。 我认为我已根据我读过的教程完成了翻版,但显而易见的是,这是错误的,只要我无法识别它,显然我需要有人解释我的角度注射的基本知识。 所以我有疑问: 我如何注入服务? 我究竟做错了什么?为什么我的代码不起作用?

4 个答案:

答案 0 :(得分:1)

MyService注入控制器而不是TestController

app.controller('TestController', ['$http', 'MyService'])

您实施的是工厂,而不是服务。所以改变它

app.factory('MyService', MyService);

答案 1 :(得分:1)

您需要定义一个Angular工厂。

angular.module('myApp', [])

.factory('MyService', function () {
    return {
        getData: getData
      }

      function getData() {
        var datos = [ << valid json >> ];
        return datos;
      }
}

答案 2 :(得分:1)

控制器的注释错误,没有'MyService',这导致未定义的MyService参数。

对于命名函数$inject,最好使用注释而不是内联数组(参见John Papa style guide),主要是因为它允许在函数签名之上使用注释并避免错误:

app.controller('TestController', TestController)

TestController.$inject = ['$http', 'MyService'];
function TestController($http, MyService) {...}

MyService是service而不是factory并不是一个相当大的问题,因为构造函数中允许返回,但如果factory不是{39}},则this更合适;使用。 factory只是更快,在这里是合理的选择。

答案 3 :(得分:0)

最后它起作用了,现在代码看起来像这样:

var app = angular.module('myApp',['ngRoute']);
app.provider('myProvider', function myProvider(){
    this.$get=function(){
        return new mFactory();
    }
});

app.controller('TestController', TestController);
app.config(appConfig);
TestController.$inject = ['$http', 'myProvider'];

function appConfig($routeProvider){
     $routeProvider.when('/', {     
         templateUrl: './test.html',
         controller: 'TestController',
         controllerAs: 'my'
    });
}
function mFactory(){
    return{
        getData:function(){
            return mydata();//returns some valid json 
        }
    }
}

我很难理解提供商是什么,但现在我知道提供商有工厂,每个工厂都返回服务产生的集合。一旦我明白一切都变得容易了。 谢谢大家的答案,每个人都帮助我找到我的小实验的解决方案。知道在那里渴望提供帮助的人感觉很好。 问候