【问题标题】:Re-Render the directive for directive attribute value change in controller重新渲染控制器中指令属性值更改的指令
【发布时间】:2017-09-09 12:39:38
【问题描述】:

有一个指令表示一个文本输入,在角度控制器中具有一些附加功能。最大长度被传递给指令,因此输入的输入文本可以基于该解析值限制在指令内。 最大长度将使用控制器变量确定,该变量将根据用户活动不时更改。指令如下

<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)();
       }
    }
}

由于ma​​xLength变量被用作属性,即使变量发生变化,指令值也不会在指令中更新。我希望在控制器值更改时更新此值,但仍然需要 ma​​xLength 变量作为指令的属性

【问题讨论】:

  • 不太清楚你在这里问什么。 Angular 使用动态重新渲染;它已经$digest 循环中重新渲染所有内容。如果您有一些应该受$digest 影响的东西,但不是,您应该显示代码。没有minimal reproducible example,其他人唯一能提供的就是盲目猜测。
  • 更新了问题:)
  • 你为什么在这里使用$parse?为什么你只在 HTML 中使用单括号 ({ })?只需传递属性,并在scope..... 中使用正常的双向绑定
  • @Claies,正如他已经提到的,他希望将其用作属性,而不是将其公开为双向绑定参数。
  • @Md.AbdulMunim 但这种解释没有意义。这个属性不能绑定到作用域的想法是从哪里来的?当我说两种方式绑定时,也许我夸大了一些事情,一种方式绑定也可以......

标签: angularjs directive


【解决方案1】:

首先,您不需要在代码中使用$parse。您应该会收到一个插值。

现在,假设您的控制器 $scope 中有一个变量 maxLength,并且您想将它传递给您的指令。考虑到这一点,您在模板中使用了如下指令-

<text-box-directive max-text-length="{{maxLength}}"></<text-box-directive>

现在在指令链接函数中,您可以使用以下代码获取属性值-

link: function (scope, element, attrs) {
  attrs.$observe('maxTextLength', function (newValue) {
    scope.maxLength = newValue;
  });
}

这样,当控制器 $scope 中的值发生更改时,您也会收到通知。

猜你喜欢
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2016-01-08
相关资源
最近更新 更多