我对学习角度感兴趣,变得如此受欢迎,似乎需要依靠它。
我遇到了问题,我在角度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;
}
}
但似乎我错误地注意了它所说的我和它的未知提供者的服务。
如果我退出对其工作的服务的引用,我必须以其他方式对数据进行设置,但它在没有服务的情况下工作。 我认为我已根据我读过的教程完成了翻版,但显而易见的是,这是错误的,只要我无法识别它,显然我需要有人解释我的角度注射的基本知识。 所以我有疑问: 我如何注入服务? 我究竟做错了什么?为什么我的代码不起作用?
答案 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
}
}
}
我很难理解提供商是什么,但现在我知道提供商有工厂,每个工厂都返回服务产生的集合。一旦我明白一切都变得容易了。 谢谢大家的答案,每个人都帮助我找到我的小实验的解决方案。知道在那里渴望提供帮助的人感觉很好。 问候