2015-10-29 59 views
0

我在這個教程中的堵漏: https://thinkster.io/mean-stack-tutorial當訪問工廠對象時,爲什麼不必在Angular.js工廠中引用「中間」對象?

其中定義使用此代碼的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對象的代碼現在被認爲是「職位」工廠代碼的一部分?

回答

0

變量o不是工廠的屬性,它只是一個臨時的局部變量。工廠的源代碼就相當於:

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

一般情況下,這樣的代碼:

var x = <some expression>; 
return x; 

等同於:

return <some expression>; 
0

這是東陽要返回整個對象。

對於爲例,你可以簡化這個代碼:

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

這樣的:

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

它具有相同的邏輯,你清楚canot做posts.o.posts ......

0

想象這在簡單的條款。

拿一張這樣的代碼:

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

    return bar; 
} 

var myVar = foo(); 

此時myVar是指創建該barfoo()。它並沒有完全指代foo()的變量。

所以,要訪問bar.baz,你應該做myVar.baz。你不會做myVar.bar.baz

Angular中的工廠基本上是相同的場景,只是包裝成一個Angular工廠。