您好我正在編寫一個指令,基於通過屬性指令傳遞的json對象執行一些自定義輸入元素驗證。 我在編譯階段添加ng-blur和ng-focus綁定到我的指令控制器中的兩個函數。然而, 。當我最初運行我的代碼時,輸入字段不包含一個值,當我點擊它並且模糊被觸發時,我可以在調試中看到ngModel確實包含該值。我認爲這個視圖並不是第一次更新,但我不明白是什麼導致了它。這是我的代碼。ngModel不會觸發視圖更新第一次
'use strict';
angular.module('zendantennesApp')
.directive('validation', function ($compile, $parse) {
return {
scope: {
validation: '@'
},
require: "?ngModel",
restrict: 'A',
compile: function(el, attrs) {
el.removeAttr('validation');
el.attr('ng-blur', 'evaluateExpression()');
el.attr('ng-focus', 'assignOriginalValue()');
var fn = $compile(el);
return function(scope, element, attrs, ngModel){
ngModel.$render = function(){
$(element).val(ngModel.$viewValue);
};
fn(scope);
}
},
controller: function($scope){
$scope.originalValue = $scope.ngModel;
$scope.validationObject = JSON.parse($scope.validation.replace(/'/g, '"'));
$scope.evaluateExpression = function(){
console.log(validationObject);
};
$scope.assignOriginalValue = function(){
$scope.originalValue = $scope.ngModel;
}
}
}
});
我的html:
<input validation="{'min':0, 'max':5}" tabindex="45" type='text' class='form-control' ng-model="aanpassing.nieuweAntenne.elektrischeTilt"/>
我添加了一個plunkr來說明這個問題:
https://plnkr.co/edit/1qYxCiSZWHgVeN9CEpxw?p=info
,如果有人能夠幫助這將是極大的讚賞
您應該改爲使用ngModelController。通過使用'require:'ngModel''而不是在範圍上。那麼ngModelController將成爲鏈接函數的第四個參數,並且您現在在控制器中執行的操作應該在那裏完成。也許嘗試閱讀ngModelController的文檔,以獲取關於如何去做的建議 – Gustav
@Gustav我更新了我的指令,但仍然遇到同樣的問題。我懷疑他們可能是我的問題的另一個原因,但我無法找到它 –
@Gustav $ render函數觸發與正確的值,至少在我的測試用例是「50.00」,但該視圖顯示一個空輸入 –