關於angularJS的 watch的 一些小用法

2021-08-14 13:32:56 字數 1981 閱讀 2580

$watch方法,它可以幫助我們在每個scope中監視其中的變數。

對於普通的變數時,如數字,字串等,直接如下寫是可以監視到變數的變化,並執行相應的函式的。

$scope.count=1;

$scope.$watch('count',function());

對於多個變數的監視變化,執行同一函式的話,可以將這幾個變數轉為字串,以『+』號隔開來進行監視

//當count或page變化時,都會執行這個匿名函式

$scope.count=1;

$scope.page=1;

$scope.$watch('count + page',function());

發現用上面兩種方法去監視陣列時,會發現即使陣列的內容改變了,也沒有觸發到這個匿名函式。之後發現wa

tch函

數其實是

有三個變

量的,第

乙個引數

是需要監

視的物件

,第二個

引數是在

監視物件

發生變化

時需要調

用的函式

,實際上

watch還有第三個引數,它在預設情況下是false。 

當第三個引數是false時,其實wa

tch函

數監視的

是陣列的

位址,而

陣列的內

容的變化

不會影響

陣列位址

的變化,

所以watch函式失靈了。 

解決辦法,就是在後面新增第三個引數為true就好(當然,也可以將這監聽返回結果為json字串形式的該物件或陣列的的匿名函式。)

$scope.items=[,];

$scope.$watch('items',function(),true);

或者將監聽返回結果為json字串形式的該物件或陣列的的匿名函式

$scope.items=[,];

$scope.$watch(function(),function());

在寫**的時候,有時會遇到要監視乙個函式返回的結果是否變化的情況,所以查了一下$watch 監視函式的情況。

方法1:監視物件為「函式名()」的字串,記得加「()」!

//未完成的任務個數

$scope.undonecount = function

() );

return count;

};//單選影響全選部分

$scope.$watch('undonecount()', function

(nv) );

方法2:在監視物件中設定為匿名函式,返回要監視的函式的返回值(繞暈了…)

$scope.$watch(function

(), function

(nv) );

wa

tch的

效能消耗

好像蠻大

的,所以

對於已經

不需要監

視的watch,記得定時取消掉。 

至於怎麼取消了…查了好久才找到的 

其實每個wa

tch函

數返回的

結果就是

這個watch的deregisterwatch()函式

//在chrome的控制台上,斷點得到的$watch的返回值

function

deregisterwatch

()

所以啊,要取消watch的話,一開始將$watch的返回值儲存就好啦,要取消watch的時候,在呼叫。

var count=1;

var unbingwatch=$scope.$watch('todolist',function

()});

關於angularjs中的jQuery

下面是乙個小例子,用來說明我經常看到的一種模式。我們需要乙個開關型的按鈕。注意 這個例子的 有點裝逼,並且有點冗長,只是為了用來代表更加複雜一些的例子,這些例子通常是以與此相同的方式來解決的。directive mydirective function else on on 這段 裡面有很多錯誤的地...

關於時間轉換 angularjs

1 angular中我們自己設定的時間filter 獲取時間轉換成指定樣式的filter 其他時間樣式 制定時間樣式 return function input 2 對頁面輸入的日期進行轉換 出生年月時間 var birthdaytime new date scope.birthday gettim...

關於angularjs返回的json不轉義問題

但在我們的專案當中會遇到這樣的情況,後台返回的資料中帶有各種各樣的html標籤。如 buglist.name aaaa12這段話放在html中是會被轉義的。也就是說會當成字串輸出來,不會被解析,這裡是做乙個高亮顯示。需要變為紅色 我們必須要使用 sce這個服務來解決我們的問題。所謂sce即 stri...