在访问工厂的对象时,为什么不必在Angular.js工厂中引用“中间”对象?

时间:2015-10-29 21:34:32

标签: javascript angularjs

我在本教程中插入: 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”工厂代码的一部分?

3 个答案:

答案 0 :(得分:0)

变量o不是工厂的属性,它只是一个临时局部变量。工厂源代码相当于:

app.factory('posts', [function(){
  return {
     posts: []
  };
}]);

一般来说,这段代码:

var x = <some expression>;
return x;

相当于:

return <some expression>;

答案 1 :(得分:0)

这是因为你要归还整个物体。

例如,您可以简化此代码:

app.factory('posts', [function(){
  var o = {
    posts: []
  };
  return o;
}]);
像这样:

app.factory('posts', [function(){
  return {
    posts: []
  };
}]);

它具有相同的逻辑,你明显可以做posts.o.posts ...

答案 2 :(得分:0)

用简单的术语想象一下。

拿一段这样的代码:

function foo()
{
    var bar = {
        baz: 5
    };

    return bar;
}

var myVar = foo();

此时myVar引用bar创建的foo()。它并没有完全引用foo()的变量。

因此,要访问bar.baz,您需要myVar.baz。你不会myVar.bar.baz

Angular中的工厂本质上是相同的场景,只是作为Angular工厂包装。

相关问题