指令之間的狀態,這可能是一個愚蠢的問題,我可以不解釋自己很好,但在這裏不用...我對目前的HTML標籤的一種形式,請注意以下指令:更新數據/在AngularJS
<input type="password" name="password1" id="password1" ng-model="user.plaintextPassword" equals="{{user.password2}}" required ng-trim="false" error-popover>
<label for="password1">Password 1</label>
<input type="password" name="password2" id="password2" ng-model="user.password2" equals="{{user.plaintextPassword}}" required ng-trim="false" error-popover >
<label for="password2">Password 2</label>
現在在這兩個標籤上我都有AngularJS指令。該equals
指令手錶密碼的兩個值,應它們匹配/不匹配這臺模型的有效性,就像這樣:
.directive('equals', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elm, attrs, ngModel) {
if(!ngModel) {
return; // do nothing if no ng-model
}
// watch own value and re-validate on change
scope.$watch(attrs.ngModel, function() {
validate();
});
// observe the other value and re-validate on change
attrs.$observe('equals', function() {
validate();
});
var validate = function() {
// values
var val1 = ngModel.$viewValue;
var val2 = attrs.equals;
// set validity
ngModel.$setValidity('equals', val1 === val2);
//console.log(ngModel);
};
}
}
現在我有一個產生驗證彈出另一個指令應形式的項目是無效的,這是在表單項的KeyDown或焦點發射(這裏是經編輯的版本):
.directive('errorPopover', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
// validate on keydown and focus in input field
element.on('keydown focus', function() {
scope.$evalAsync(function() {
var popoverOptions = {
'placement': (attrs.errorPopover) ? attrs.errorPopover : 'left',
'trigger': 'manual',
'content': setValidationText(attrs, ngModel)
};
// raise the error etc...
});
});
// hide popover when user leaves input
element.on('blur', function() {
// do stuff
});
var setValidationText = function(attrs, ngModel) {
var errorText = '';
// lots going on here... and then
if(attrs.equals && ngModel.$error.equals === false) {
// add to the error text
}
return errorText;
};
}
};
現在,這並不爲ngModel
工作是不同的,而equals
指令將保持正確的有效性值errorPopover
指令沒有。所以這個值可能是錯誤的,但在errorPopover
指令中ngModel.$error.equals
總是保持爲真。如何使用由equals
指令確定的正確值更新errorPopover
指令?
請注意:建議或在正確的方向一推之後,我更不是一個代碼示例...因爲我不能確定這是否是關於隔離範圍或廣播,等等,等等...
在plunker中的演示將有所幫助。很難幫助解決問題而不能使用控制檯 – charlietfl
在我看來,'errorPopover'應該只能監視模型的有效性,而不能被綁定到元素事件。 – charlietfl