大家好!提前谢谢!
我有以下问题:我想看一个输入字段的属性,同时是我的指令的名称,以便在需要时关注并选择值 a)输入字段所在的区域被激活或何时被激活 b)发生服务器错误。
这里是输入字段的代码:
<input type="email"
data-focus-and-select="areas.contactInformationEditEmail || hasServerErrorsEmail()" />
这里是控制器功能的代码:
$scope.hasServerErrorsEmail = function() {
return !!($scope.notifications.errors.email.empty ||
$scope.notifications.errors.email.invalid ||
$scope.notifications.errors.email.illegal ||
$scope.notifications.errors.email.blacklisted ||
$scope.notifications.errors.email.conflict);
};
如果发生服务器错误,则其中一个通知错误设置为true 这里是指令的代码:
angular.module('myApp.directive').directive('focusAndSelect', function() {
'use strict';
return {
scope: { focusAndSelect: '=' },
link: function(scope, element) {
scope.$watch('focusAndSelect', function(newValue) {
if (newValue && !element.hasClass('ng-hide')) {
element[0].focus();
element[0].setSelectionRange(0, element[0].value.length);
}
});
}
};
});
有三种情况:
1)&#34;焦点并选择&#34;当我将表单更改为可编辑模式时,areas.contactInformationEditEmail
设置为true。
2)&#34;焦点和选择&#34;当我收到服务器错误时,它不会工作。输入字段未被聚焦和选择。
3)但是当我从表达式areas.contactInformationEditEmail
中删除areas.contactInformationEditEmail || hasServerErrorsEmail()
时,&#34;焦点并选择&#34;适用于接收输入字段的错误。
我不知道。是否可能会立即观察和变量以及函数调用?
感谢您的帮助。
答案 0 :(得分:0)
当你使用&#39; =&#39;在指令的隔离范围内,它绑定到父范围中的属性,它不可能绑定到计算表达式。
试试这个:
<input type="email"
data-focus-and-select="{{areas.contactInformationEditEmail || hasServerErrorsEmail()}}" />
和你的指令:
angular.module('myApp.directive').directive('focusAndSelect', function() {
'use strict';
return {
scope: { focusAndSelect: '=' },
link: function(scope, element) {
scope.$watch('focusAndSelect', function(newValue) {
if (newValue && !element.hasClass('ng-hide') && scope.$eval(newValue)) {
element[0].focus();
element[0].setSelectionRange(0, element[0].value.length);
}
});
}
};
});
你需要$ eval,因为这个值是一个String,你想得到它的布尔值。
这里有一个简化的jsfiddle来演示它。