簡體   English   中英

關於$ scope的第一個參數的困惑。$ watch

[英]Confusion about first parameter of $scope.$watch

從掛鈎徒步旅行者指南到指示燈泡的例子

  scope.$watch(function() {
            scope.bulb = controller.getState();
        });

$watch第一個參數是一個函數,這里正在觀看什么?

我讀了另一篇關於范圍的 SO帖子,這就是解釋。

$watch方法的第一個參數(”watchExpression“)可以是一個Angular字符串表達式(根據$ scope計算),也可以是一個函數,它以$scope作為第一個參數調用。”

我仍然不清楚使用函數作為$watch的第一個參數,從燈泡示例 - 范圍隱式地作為參數傳遞給該函數? - 該函數是否隱式返回scope.bulb,因此正在監視scope.bulb?

不,正在觀看該功能 這意味着調用該函數並根據上次每次apply-digest循環至少返回一次的值檢查其值! 范圍確實已通過,但未在您的示例中使用。 HTH

PS使用監視表達式在范圍上設置值有點奇怪。 watch表達式函數應該做的是返回狀態並在回調中設置范圍值。 這意味着它僅在更改時設置,而不是每次檢查時設置。 奇怪的例子!

對我來說,這看起來像$watch的錯誤用法。 該函數應返回一個值,該值將被觀察以進行更改,但在這種情況下,它將始終undefined ,因此將永遠不會監視值的更改。 更好的方法是這樣的:

scope.$watch(function() {
    return controller.getState();
}, function(newVal) {
    scope.bulb = newVal;
});

這將監視controller.getState()更改,並在更改時將新值分配給scope.bulb

這是在調用$ digest時通知的習慣用法。 文檔中 ,請參閱$watch的文檔:

如果您希望在調用$ digest時收到通知,則可以注冊一個沒有監聽器的watchExpression函數。 (由於watchExpression可以在檢測到更改時每$摘要周期執行多次,因此請准備多次調用您的偵聽器。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM