当前位置: 首页 > 面试题库 >

Angular.js将过滤器传递给指令双向('=')属性

子车超英
2023-03-14
问题内容

我需要sublist在页面的几个地方使用指令,它有时应包含完整fields列表,但有时应进行过滤。这是我的幼稚方法:

HTML:

  <div ng-controller="MainCtrl">
      <sublist fields="fields" /> <!-- This one is OK -->
      <sublist fields="fields | filter: 'Rumba'" /> <!-- This one raises error -->
  </div>

Javascript:

angular.module('myApp', [])
    .directive('sublist', function () {
        return {
            restrict: 'E',
            scope: { fields: '=' },
            template: '<div ng-repeat="f in fields">{{f}}</div>'
        };
    })
    .controller('MainCtrl', function($scope) {
        $scope.fields = ['Samba', 'Rumba', 'Cha cha cha'];
    });

http://jsfiddle.net/GDfxd/14/

当我尝试使用过滤器时,出现此错误:

Error: 10 $digest() iterations reached. Aborting!

有解决此问题的方法吗?


问题答案:

$消化迭代
错误通常发生在有改变模型中的守望者。在错误情况下,隔离fields绑定将绑定到过滤器的结果。该绑定创建了一个观察者。由于过滤器每次运行时都会从函数调用中返回一个新对象,因此它会导致观察者不断触发,因为旧值永远不会与新值匹配(请参阅Google
Groups中Igor的注释
)。

一个好的解决办法是fields在两种情况下都进行绑定:

<sublist fields="fields" /></sublist>

并向第二种情况添加另一个可选属性以进行过滤:

<sublist fields="fields" filter-by="'Rumba'" /></sublist>

然后像这样调整指令:

return {
    restrict: 'E',
    scope: {
        fields: '=',
        filterBy: '='
    },
    template: '<div ng-repeat="f in fields | filter:filterBy">'+
              '<small>here i am:</small> {{f}}</div>'
};

注意:切记sublist在小提琴中关闭标签。

这是一个小提琴



 类似资料:
  • 问题内容: 我有一个属性指令,其限制如下: 我需要传递两个属性;一个数字和一个函数/回调,使用对象在指令中访问它们。 如果指令是元素指令,那么我可以限制为: 但是,出于某种原因,我不再赘述,我需要将该指令作为属性指令。 如何将多个属性传递到属性指令中? 问题答案: 该指令可以访问在同一元素上定义的任何属性,即使该指令本身不是该元素也是如此。 模板: 指示: 如果attribute的值将被硬编码,则

  • 问题内容: 通过指令的属性将数组传递给指令时,我目前遇到问题。我可以将其读取为字符串,但是我需要将其作为数组,所以这是我想出的,但是不起作用。帮助任何人?提前 Javascript :: HTML :: 问题答案: 如果要从您的作用域访问此数组,即加载到控制器中,则只需传递变量名称即可: 指示: 模板:

  • 问题内容: 这是我的config.json: 这是我的bash命令: 输出: 因此$ PRJNAME是prj1,但是第一次调用仅输出。 有人能帮我吗? 问题答案: 您的示例中的jq程序实际上会尝试查找名为的键。请尝试以下操作:

  • 问题内容: 是否可以将参数传递给filter函数,以便您可以按任何名称进行过滤? 就像是 问题答案: 实际上,还有另一种(也许是更好的解决方案),您可以使用angular的本机“过滤器”过滤器,并且仍将参数传递给自定义过滤器。 考虑以下代码: 要进行此工作,您只需将过滤器定义如下: 如您在这里看到的,weDontLike实际上返回另一个函数,该函数的范围内有您的参数以及来自过滤器的原始项。 我花了

  • 问题内容: 这里有角的新手。我试图找出将对象传递给指令时出了什么问题。 这是我的指令: 这是我调用指令的模板: 是一组对象。 当我运行此,日志,而日志罚款的范围,甚至有一个与所有的数据,我找孩子。 我不确定我在这里做错了什么,因为这种确切的方法以前对我有用。 编辑: 我已经用所有必需的代码创建了一个插件:http ://plnkr.co/edit/uJCxrG 如您所见,该作用域在范围中可用,但我

  • 问题内容: 我想知道是否有一种方法可以将参数传递给指令? 我想做的是从控制器添加一个指令,如下所示: 是否可以同时传递一个参数,以便我的指令模板的内容可以链接到一个作用域或另一个作用域? 这是指令: 如果我想使用相同的指令但使用$ scope.title2怎么办? 问题答案: 这是我解决问题的方法: 指示 控制者 现在,我可以通过同一指令使用不同的作用域,并动态附加它们。