我在看this interesting piece on Angular best practices,并决定采用其中一些想法作为我自己的想法。然而,他的工厂符号对我来说是一个新鲜事物 - 我之前在任何教程中都没有看过它。作为参考,这是他如何做到的:
app.controller('InboxCtrl',
function InboxCtrl ($scope, InboxFactory) {
InboxFactory
.getMessages()
.then(function () {
$scope.messages = InboxFactory.messages;
});
});
app.factory('InboxFactory',
function InboxFactory ($location, NotificationFactory) {
InboxFactory.getMessages = function () {
return $http.get('/messages')
.success(function (data) {
// magic line, we resolve the data IN the factory!
InboxFactory.messages = data;
});
};
});
然而,我正在努力解决这个问题。我无法像他那样完全做到 - 在工厂中没有返回任何内容似乎每次调用InboxFactor.something
时都会Cannot find property something of undefined
错误。
这是我最好的尝试:
.factory( 'FormsOverviewFactory', function FormsOverviewFactory(apiForms) {
FormsOverviewFactory.forms = [];
FormsOverviewFactory.asdf = function(){
console.log("asdf",FormsOverviewFactory.forms);
};
FormsOverviewFactory.getForms = function(){
return apiForms
.forms()
.get()
.$promise.then(function (result){
FormsOverviewFactory.forms = result.data;
// THIS PRINTS THE CORRECT DATA
FormsOverviewFactory.asdf();
});
};
return{
forms: FormsOverviewFactory.forms,
asdf: FormsOverviewFactory.asdf,
getForms: FormsOverviewFactory.getForms
};
})
.controller( 'FormsOverviewCtrl', function FormsOverviewCtrl($scope, FormsOverviewFactory) {
FormsOverviewFactory.getForms().then(function(){
$scope.createdForms.forms = FormsOverviewFactory.forms;
FormsOverviewFactory.asdf();
// GIVES RIGHT STUFF
console.log($scope.createdForms.forms);
// GIVES []
});
答案 0 :(得分:2)
这可能是代码中的拼写错误。
根据上下文,作者的意图似乎是返回工厂功能本身 在您的情况下,这将意味着替换:
return {...}
使用:
return FormsOverviewFactory;
另请参阅此 short demo 。
在这种情况下,我想知道为什么不使用.service
代替.factory
和this.something
而不是FormsOverviewFactory.something
(并且不必返回任何内容 - 控制器&#39 ; s代码保持不变)?