[toc]
注:如果想在input顯示乙個值,然後實際上是另乙個值的話,有多種方法,思路就是element.val()用來顯示用於展示的值,model的值可以用參考官網(需要翻牆)
假如我們現在需要編寫兩個指令,在linking函式中有很多重合的方法,為了避免重複自己(著名的dry原則),我們可以將這個重複的方法寫在第三個指令的controller中,然後在另外兩個需要的指令中require這個擁有controller欄位的指令,最後通過linking函式的第四個引數就可以引用這些重合的方法。**的結構大致如下:
return ;
this.method2 = function();
},...
}}); return ,
...}
}); return ,
...}
});
所以link的第四個引數就是required的指令對應的ctrl先看看例子:
指令:
angular.module('customcontrol', )
.directive('contenteditable', function() ;
// 監聽change事件來開啟繫結
element.on('blur keyup change', function() );
read(); // 初始化
// 將資料寫入model
function read()
ngmodel.$setviewvalue(html);}}
};});
ngmodelcontroller方法
ngmodelcontroller屬性
將要執行的函式的陣列,無論什麼時候控制器從dom中讀取了乙個值,它都將作為乙個管道。其中的函式依次被呼叫,並將結果傳遞給下乙個。最後出來的值將會被傳遞到model中。其中將包括驗證和轉換值的過程。對於驗證步驟,這個解析器將會使用$setvalidity方法,對於不合格的值將返回undefined。
乙個包含即將執行函式的陣列,無論什麼時候model的值發生了變化,它都會作為乙個管道。其中的每乙個函式都被依次呼叫,並將結果傳遞給下乙個函式。該函式用於將模型傳遞給檢視的值進行格式化。
ng-model-options
,就是可以實現對延遲更新、如何觸發更新、時區(timezone針對input[type='date']
等)等的控制
//github上的block-example/表單操作-11/ng-model-options.html
angular.module('option***ample', )
.controller('examplecontroller', ['$scope', function($scope) ;
$scope.cancel = function(e)
};}]);
user.name =
$rollbackviewvalue(); $commitviewvalue(); $addcontrol(); $removecontrol(); $setvalidity(); $setdirty(); $setpristine(); $setuntouched(); $setsubmitted();
屬性:
$pristine(form沒被動過) $dirty(form被動過) $valid(全部驗證通過) $invalid(驗證不通過) $submitted $error
email、max、maxlength、min、minlength、number、pattern、required、url、date、datetimelocal、time、week、month
方法:
$render(); $isempty(value); $setvalidity(validationerrorkey, isvalid); $setpristine(); $setdirty(); $setuntouched(); $settouched(); $rollbackviewvalue(); $validate(); $commitviewvalue(); $setviewvalue(value, trigger);
擁有的屬性:
$viewvalue //介面顯示的資料
$modelvalue //$scope上面的value
$parsers //在view->model的時候會觸發的乙個函式組,無論什麼時候model發生改變,所有的ngmodelcontroller.$formatters(model發生改變時觸發資料有效驗證和格式化轉變)陣列中的function將排隊執行,所以在這裡每乙個function都有機會去格式化model的值,並且通過ngmodelcontroller.$setvalidity修改空間的驗證狀態。
$formatters //在model->view的時候會觸發的乙個函式組, 無論任何時候使用者與控制項發生互動,將會觸發ngmodelctroller.$setviewvalue。這時候輪到執行ngmodelcontroller.$parsers(當控制項從dom取值之後,將會執行這個陣列中的所有方法,對值進行審查過濾或轉換,也進行驗證)陣列中的所有方法。
$validators
$asyncvalidators
$viewchangelisteners
$error
$pending
$untouched
$touched
$pristine
$dirty
$valid
$invalid
$name
雙向繫結的機制可以在$parsers和$formatters可以體現出來,通過這些我們可以在view->scope做類似表單驗證(自定義)的功能(配合$setvalidity(validationerrorkey, isvalid);),scope->view資料格式自定義等操作(配合$setviewvalue(value, trigger);),可以看一下下面的這個例子:
表單操作-11/ng-model.html
var custom = angular.module('customcontrol', ['ngsanitize']);
custom.directive("noxiaobin", function () else
});}
}});
custom.directive('contenteditable', ['$sce', function($sce) ;
//對element的監聽
element.on('blur keyup change', function() );
read(); // 初始化
// write data to the model
function read()
ngmodel.$setviewvalue(html); //獲取viewvalue,設定$viewvalue}}
};}]);
雙向資料繫結
2 mvvm 2.總結mvvm 二 vue 2 實現mvvm主要包含兩個方面,資料變化更新檢視,檢視變化更新資料 最近面試時老被問到雙向資料繫結。明明概念看了好幾遍,也總結了好幾次,但是還是被問住 參考文章 很欣賞這篇部落格作者的一句話,再長的路,一步步也能走完。再短的路,不邁開雙腳也無法到達。送給...
雙向資料繫結
雙向資料繫結基於mvvm框架,vue屬於mvvm框架 mvvm m等於model,v等於view,即model改變影響view,view改變影響model 1.雙向資料繫結 必須在使用在表單裡面 使用v model繫結資料,實現動態資料變化 js export default 獲取動態資料 獲取表單...
資料雙向繫結原理
angularjs 採用 髒值檢測 的方式 資料發生變更後,對於所有的資料和檢視的繫結關係進行一次檢測,識別是否有資料發生了改變,有變化進行處理,可能進一步引發其他資料的改變,所以這個過程可能會迴圈幾次,一直到不再有資料變化發生後,將變更的資料傳送到檢視,更新頁面展現。如果是手動viewmodel ...