我将继续学习本教程:https://thinkster.io/mean-stack-tutorial
使用以下代码定义Angular.js工厂:
app.factory('posts', [function(){
var o = {
posts: []
};
return o;
}]);
我不明白的是,稍后在控制器中,为了填充变量$scope.posts,使用了以下代码:
$scope.posts = posts.posts;
这是有效的,而:
$scope.posts = posts.o.posts;
没有。我不明白如何直接访问"posts"工厂中的"posts"变量;这是因为通过键入代码:
return o
所有o对象的代码现在都被认为是"posts"工厂代码的一部分?
app.factory('posts', [function(){
return {
posts: []
};
}]);
一般来说,这个代码:
var x = <some expression>;
return x;
相当于:
return <some expression>;
这是因为您要返回整个对象。
例如,您可以简化此代码:
app.factory('posts', [function(){
var o = {
posts: []
};
return o;
}]);
像这样:
app.factory('posts', [function(){
return {
posts: []
};
}]);
它有同样的逻辑,你显然不能这样做posts.o.posts
。。。
用更简单的术语来想象一下。
以这样的代码为例:
function foo()
{
var bar = {
baz: 5
};
return bar;
}
var myVar = foo();
此时,myVar
指的是foo()
创建的bar
。它并没有完全引用foo()
的变量。
因此,要访问bar.baz
,您需要执行myVar.baz
。你不会做myVar.bar.baz
。
Angular中的工厂本质上是相同的场景,只是包装为Angular工厂。