$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...