angularjs - attr.$observe 必需的指令

标签 angularjs directive

查看 ngRequired 指令,我发现它们没有使用隔离范围,但它们设法观察“required”属性并检查是否有更改(获取最终的 bool 表达式结果)

attr.$observe('required', function() {
  validator(ctrl.$viewValue);
});

如果在 Controller 范围内我有一个名为 isRequired 的 bool 变量,我可以直接编写:

<input id="year"
          type="text"
          name="year"
          data-ng-model="currentVehicleEdit.year"
          data-ng-required="isRequired" />

我得到的表达式被评估为 true 或 false。

我在指令上尝试了相同的方法(下拉验证),但我得到的只是该属性的文本值。所以我必须输入这样的内容才能获得结果(“true”,“false”):

<select id="involvementType"
      name="involvementType"
      data-ng-model="currentVehicleEdit.involvementType"
      data-ng-options="a.name for a in involvementTypes"
      data-combocontainsinvalidselection="{{showForm}}"
>
</select>

如果我尝试以与 ngRequired (data-combocontainsinvalidselection="showForm") 中相同的方式使用它,我只会得到纯文本 ("showForm"),而不是计算的表达式。

关于我创建的指令代码:

mydirectives.directive('combocontainsinvalidselection', [
    function () {
        return {
            require: "?ngModel",
            link: function(scope, elm, attr, ctrl) {
                if (!ctrl) return;

                var validator = function (value) {
                    if (attr.combocontainsinvalidselection == true && value.id==0) {
                        ctrl.$setValidity('combocontainsinvalidselection', false);
                        return;
                    } else {
                        ctrl.$setValidity('combocontainsinvalidselection', true);
                        return value;
                    }
                };

                ctrl.$formatters.push(validator);
                ctrl.$parsers.unshift(validator);

                attr.$observe('combocontainsinvalidselection', function () {
                    validator(ctrl.$viewValue);
                });                               
            }
        };
    }
]);

ng-required 指令如何设法对表达式求值?

最佳答案

您可以parse属性。首先,避免在标记中的 showForm 周围使用 {{}},然后在您的条件中使用 $parse,如下所示:

 if (  $parse(attr.combocontainsinvalidselection)(scope) == true && value.id==0) {
     //some code

不要忘记$parse 注入(inject)指令声明中。

关于angularjs - attr.$observe 必需的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22787009/

相关文章:

javascript - 如何添加搜索(例如按类别)?

angular - 自 Parent Angular 2 起访问特定组件的方法

angularjs - 将数组对象从 Controller 传递到 AngularJS 中的自定义指令

javascript - Angular : How does ng-click directory parses the expression without doubly curly brace?

javascript - 将对象传递给函数时, Angular 范围不会更新

javascript - Angular.JS : views sharing same controller, 模型数据在更改 View 时重置

php - 在执行此命令时出现的错误

angularjs - 在指令实例之间进行通信的最佳方式

angularjs - Angular $解析器: why is a SPACE disregarded when typed into this INPUT element?

javascript - AngularJs 按钮失去范围