Joh*_*ing 6 angularjs angularjs-service
我是一个有角度的新手,我正在构建一个应用程序,有一件事让我感到困惑的是有几种方法可以定义服务,而且我从这个链接中读到更多:如何定义服务 然后它似乎没有大的区别定义服务的方式.
但我刚才注意到一个与众不同的区别:
看到我从这里得到的这项服务http://jsfiddle.net/2by3X/5/
var app = angular.module('myApp', []);
app.service('test', function($timeout, $q) {
var self = this;
this.getSomething = function() {
return self.getData().then(function(data) {
return self.compactData(data);
});
};
this.getData = function() {
var deferred = $q.defer();
$timeout(function() {
deferred.resolve("foo");
}, 2000);
return deferred.promise;
};
this.compactData = function(data) {
var deferred = $q.defer();
console.log(data);
$timeout(function() {
deferred.resolve("bar");
}, 2000);
return deferred.promise;
};
});
Run Code Online (Sandbox Code Playgroud)
如果我使用"factory"定义此服务,如下所示,一个函数不能调用该服务的其他功能.
app.factory('test', function($timeout, $q) {
return {
getSomething : function() {
return getData().then(function(data) {
return compactData(data);
});
},
getData : function() {
var deferred = $q.defer();
$timeout(function() {
deferred.resolve("foo");
}, 2000);
return deferred.promise;
},
compactData : function(data) {
var deferred = $q.defer();
console.log(data);
$timeout(function() {
deferred.resolve("bar");
}, 2000);
return deferred.promise;
},
};
});
Run Code Online (Sandbox Code Playgroud)
我将在浏览器控制台中获取此信息:
[08:41:13.701] "Error: getData is not defined
.getSomething@http://fiddle.jshell.net/_display/:47
Ctrl1@http://fiddle.jshell.net/_display/:75
invoke@http://code.angularjs.org/1.0.0/angular-1.0.0.js:2795
instantiate@http://code.angularjs.org/1.0.0/angular-1.0.0.js:2805
Run Code Online (Sandbox Code Playgroud)
有谁能解释一下?谢谢.
你有两个大问题:
也就是说,你应该返回一个像这样的对象 {key: value, key: value}
值可以是函数.但是,你回来了{key = value, key = value}
第一个修复:
return {
getSomething : function() {...},
getData : function...
}
Run Code Online (Sandbox Code Playgroud)
其次,无法调用函数是正常的.看到这个jsfiddle.我嘲笑一切.您可以调用服务返回的其中一个函数.但是,当从getSomething尝试调用getData时,您会得到"undefined":
app.factory('testSO', function () {
return {
getSomething: function () {
console.log('return getsomething');
getData();
},
getData: function () {
console.log('return getData');
}...
Run Code Online (Sandbox Code Playgroud)
这与声明工厂函数范围内的所有内容和返回引用在jsfiddle中相同:
app.factory('testSO', function () {
var getSomething = function () {
console.log('return getsomething');
};
...
return {
getSomething: getSomething,
...
}
Run Code Online (Sandbox Code Playgroud)
app.factory('testSO', function () {
var getSomething = function () {
console.log('return getsomething');
getData();
};
...
Run Code Online (Sandbox Code Playgroud)
原始服务有一些重要的东西:var self = this;.有些人使用 var = this.这是ECMA错误的解决方法.在原始代码的情况下,它用于"将所有内容放在一个对象中".函数(恰好是函数的属性) self需要一个参考来知道你想要调用的函数在哪里.在这里自己试试http://jsfiddle.net/Z2MVt/7/
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |