首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角属性指令加ng变化

问角属性指令加ng变化
EN

Stack Overflow用户
提问于 2016-12-21 22:01:48
回答 1查看 1.5K关注 0票数 0

我有一个指令定义为:

​

代码语言:javascript
复制
module.directive('inputChanged', function () {
        function link(scope, element, attrs) {
            var field = attrs.ngModel;
            if (field) {
                var fn = "model.changed('" + field + "')";
                element.attr('ng-change', fn);
            }            
        }

        return {
            restrict: 'A',
            link: link
        }
    });

​

我用的是:

​

代码语言:javascript
复制
<input ng-model="model.user.middleName" input-changed type="text" class="k-textbox">

​

目标是以模型字段为参数动态注入ng变化。我的场景实际上要复杂一些,但我正在简化这个问题。这就是为什么我需要动态地注入它,而不是将它直接放在输入标记中。

这是可行的,我可以看到在页面呈现后标记中的ng更改。

​

代码语言:javascript
复制
<input ng-model="model.user.middleName.value" type="text" class="k-textbox ng-valid ng-not-empty ng-dirty ng-valid-parse ng-touched" ng-change="model.changed('model.user.middleName.value')" aria-invalid="false">

​

问题是model.changed(.)不是开火。如果我把它硬编码,而不是使用指令,一切都会像预期的那样工作。

我遗漏了什么?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-21 22:16:24

您需要在添加ng更改指令后编译元素。

代码语言:javascript
复制
angular
  .module('app')
  .directive('inputChanged', inputChanged);

  function inputChanged($compile) {

  var directive = {
      restrict: 'A',
      link: link,
      terminal: true,
      priority: 1000,
  };
  return directive;

  function link(scope, element, attrs) {
    var field = attrs.ngModel;
    if (field) {
      var fn = "main.changed(" + field + ")";

      // Remove the attribute to prevent  
      // an infinite compile loop
      element.removeAttr('input-changed');
      element.attr('ng-change', fn);
      $compile(element)(scope);
    }
  }
};

工作柱塞。

有关在这个帖子。中从指令中添加指令的详细信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41272642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档