這更多的是一般的JavaScript閉包和範圍函數,但我會在角度的上下文中詢問它。比方說,我有以下控制器:
var Controller = function ($scope, factory) {
$scope.Letter = 'A';
/*
Some other code
.
.
.
*/
$scope.OnClick = function() {
console.log($scope.Letter);
SomethingWithCallBack('a param', 34, function() {
console.log($scope.Letter);
});
}
};
假設有事其中$ scope.Letter進行更新,然後onClick函數解僱。 OnClick中的$ scope.Letter保持原始值。我可以通過將該行更改爲console.log(this.Letter);
來解決此問題。但是,我不能在SomethingWithCallBack()的匿名函數中執行此操作。在那裏,我現在通過如下分配一個變量值this.Letter
來解決問題。
var myLetter = this.letter;
SomethingWithCallBack('a param', 34, function() {
console.log(myLetter);
});
有沒有辦法在回調裏面引用「outer this」,所以我不需要指定變量?
你是什麼意思在onclick $ scope.letter保持原來的價值?因爲那不是真的。如果更新$ scope.letter,那麼當您調用onClick時,它將成爲新值。現在,你似乎直接在範圍上使用原語,所以這會給你帶來繼承範圍的問題,這可能會導致你認爲它不會改變。 – Zerot
你是什麼意思「在範圍上使用原語?你的意思是作用域的成員(int串和日期)? –
正確。通過在子範圍上設置範圍的原始值,父範圍值不會被更改。子範圍將具有自己的(相同的名稱)字段和自己的值。因此,您應該始終將對象放在您設置字段的範圍內。 – Zerot