重新渲染控制器中指令属性值更改的指令
Re-Render the directive for directive attribute value change in controller
有一个指令表示 angular 控制器中具有一些附加功能的文本输入。最大长度被传递给指令,因此可以根据该解析值将输入的输入文本限制在指令内。 最大长度将使用控制器变量确定,该变量将根据用户活动不时更改。指令如下
<text-box-directive data-max-length="{{maxLength}}"></<text-box-directive>
这是指令
angular.module('common.directives')
.directive('textBoxDirective', function ($parse) {
return {
scope: {
// some additional scope variables
},
link: function (scope.element, attrs) {
scope.maxLength = $parse(attrs.maxLength)();
}
}
}
由于maxLength变量被用作属性,即使变量发生变化,指令中的指令值也不会更新。我希望在控制器值更改时更新此值,但仍然需要 maxLength 变量作为指令的属性
首先,您不需要在代码中使用 $parse
。您应该收到一个内插值。
现在,假设您的控制器 $scope
中有一个变量 maxLength
,并且您想将其传递给您的指令。考虑到这一点,您在模板中使用了如下指令-
<text-box-directive max-text-length="{{maxLength}}"></<text-box-directive>
现在在指令 link 函数中,您可以使用以下代码获取属性值-
link: function (scope, element, attrs) {
attrs.$observe('maxTextLength', function (newValue) {
scope.maxLength = newValue;
});
}
这样,只要控制器中的值发生变化,您也会收到通知 $scope
。
有一个指令表示 angular 控制器中具有一些附加功能的文本输入。最大长度被传递给指令,因此可以根据该解析值将输入的输入文本限制在指令内。 最大长度将使用控制器变量确定,该变量将根据用户活动不时更改。指令如下
<text-box-directive data-max-length="{{maxLength}}"></<text-box-directive>
这是指令
angular.module('common.directives')
.directive('textBoxDirective', function ($parse) {
return {
scope: {
// some additional scope variables
},
link: function (scope.element, attrs) {
scope.maxLength = $parse(attrs.maxLength)();
}
}
}
由于maxLength变量被用作属性,即使变量发生变化,指令中的指令值也不会更新。我希望在控制器值更改时更新此值,但仍然需要 maxLength 变量作为指令的属性
首先,您不需要在代码中使用 $parse
。您应该收到一个内插值。
现在,假设您的控制器 $scope
中有一个变量 maxLength
,并且您想将其传递给您的指令。考虑到这一点,您在模板中使用了如下指令-
<text-box-directive max-text-length="{{maxLength}}"></<text-box-directive>
现在在指令 link 函数中,您可以使用以下代码获取属性值-
link: function (scope, element, attrs) {
attrs.$observe('maxTextLength', function (newValue) {
scope.maxLength = newValue;
});
}
这样,只要控制器中的值发生变化,您也会收到通知 $scope
。