AngularJS指令:需要绑定

时间:2015-03-09 10:56:51

标签: angularjs angularjs-directive

我目前正在编写依赖于使用ngBind的属性指令。我需要元素承载指令的ngBind属性才能工作。我认为一个简单的require: 'ngBind'就足够了,就像你和ngModel一样。所以这就是我所做的:

app.directive( 'myDirective', function() {
  return {
    restrict: 'A',
    require:  'ngBind',
    link: function(scope, element, attrs) { .. }
});

以下是我如何使用我的指令:

<span my_directive="" ng_bind="valueToBeBound"></span>

但后来我收到了这个错误,所以我想它不可能这样做:

Error: error:ctreq
Missing Required Controller
Controller 'ngBind', required by directive 'myDirective', can't be found!

有没有办法强制出现ngBind? 谢谢!

2 个答案:

答案 0 :(得分:3)

这是预期的行为。正如AngularJS文档中针对指令require选项所定义的那样:

  

需要另一个指令并将其控制器作为第四个注入   链接函数的参数。 require需要一个字符串名称(或   要传入的指令的字符串数组。如果使用数组,   注入的参数将是一个相应顺序的数组。如果不   可以找到这样的指令,如果指令没有,则   控制器,然后引发错误(除非没有链接功能   指定,在这种情况下会跳过错误检查)

由于ngBind所需的myDirective指令没有控制器,因此预计会引发错误,除非您删除myDirective指令中的链接函数,然后angular将简单跳过错误检查。

有两种方法可以达到你想要的效果。

  1. 删除link()指令中的myDirective函数,然后在该指令中添加控制器函数以添加组件逻辑。此解决方案的问题在于您无法在link()函数中附加DOM逻辑。

    1. 解决问题的最理想方法是简单地删除require选项,只需检查ngBind指令所在元素中是否存在myDirective属性。< / LI>

      e.g。

      app.directive( 'myDirective', function() {
        return {
          restrict: 'A',
          link: function(scope, element, attrs) {
             if(angular.isUndefined(attrs.ngBind)) {
                return;
             }
      
             // Your myDirective DOM LOGIC/MANIPULATION should be here 
      
          }
      });
      

答案 1 :(得分:-1)

正如在此解释的那样:Angular NgModelController您需要提供ngBind

<span ng-bind="ModelName"></span>