Jestem początkującym początkującym, buduję aplikację, jedną rzecz naprawdę zastanawiającą mnie jest kilka sposobów definiowania usługi, a ja przeczytałem więcej z tego linku: How to define service następnie wydaje się, że nie ma dużej różnicy między sposobami definiowania usługi.Definicja usługi kątowej: serwis lub fabryka
ale ja zauważyłem jedną różnicę, która moim zdaniem jest inaczej:
zobaczyć tę usługę otrzymuję stąd 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;
};
});
gdybym określić tę usługę za pomocą „fabrykę” jak poniżej, jedna funkcja nie może wywoływać inne funkcje usługi.
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;
},
};
});
będę się tego w konsoli przeglądarki:
[08:41:13.701] "Error: getData is not defined
[email protected]://fiddle.jshell.net/_display/:47
[email protected]://fiddle.jshell.net/_display/:75
[email protected]://code.angularjs.org/1.0.0/angular-1.0.0.js:2795
[email protected]://code.angularjs.org/1.0.0/angular-1.0.0.js:2805
Może ktoś to wyjaśnić? dzięki.
Jesteś człowiekiem, Eduard, dzięki bardzo dużo. –
brak prob :) Uaktualniłem odpowiedź, aby dodać szybkie wyjaśnienie tej rzeczy w oryginalnym kodzie. Zobacz go w akcji tutaj http://jsfiddle.net/Z2MVt/7/ –
+1, miłe użycie wzoru [ujawniającego moduł] (http: // addyosmani.com/resources/essentialjsdesignpatterns/book/# revealingmodulepatternjavascript) –