Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter AngularDart:过滤器链接:过滤器的顺序重要吗?_Filter_Dart_Angular Dart_Ng Repeat_Data Formatters - Fatal编程技术网

Filter AngularDart:过滤器链接:过滤器的顺序重要吗?

Filter AngularDart:过滤器链接:过滤器的顺序重要吗?,filter,dart,angular-dart,ng-repeat,data-formatters,Filter,Dart,Angular Dart,Ng Repeat,Data Formatters,我想了解链式过滤器/格式化程序如何通过ng repeat指令在AngularDart中执行 有人能以简洁明了的方式解释它是如何工作的吗 参考教程没有提供足够的详细信息,无法完全掌握AngularDart链式过滤器执行的工作原理。下面是我通过查看文档和回顾AngularDart源代码部分所了解的内容 参考链接: 原github帖子: **在ng repeat中评估过滤器的假定执行链** 格式化程序/筛选器可以访问中继器内部的列表,例如ng repeat recipeList通过ng repeat的

我想了解链式过滤器/格式化程序如何通过ng repeat指令在AngularDart中执行

有人能以简洁明了的方式解释它是如何工作的吗

参考教程没有提供足够的详细信息,无法完全掌握AngularDart链式过滤器执行的工作原理。下面是我通过查看文档和回顾AngularDart源代码部分所了解的内容

参考链接: 原github帖子:

**在ng repeat中评估过滤器的假定执行链**

格式化程序/筛选器可以访问中继器内部的列表,例如ng repeat

recipeList通过ng repeat的范围提供给cf

cf=categoryfilter(列表,映射)-->categoryfilter

fltr=过滤器(列表,名称过滤器字符串)-->filteredList,名称

ordBy=orderBy(列表,名称)-->orderdList

  • 首先获取用户选择的类别,将列表传递到下一个过滤器
  • 过滤与所选类别相关的输入文本
  • 根据默认的按名称升序排列在上面2中筛选的列表
  • 为列表中的每个项目创建html范围
  • Html视图(从右到左:1,2,3,4.如下所示):

    <4.ng repeat=订单列表中的配方| .... 为了清晰起见,这里省略了重复的dom元素
    表达式中的格式化程序的顺序如下

  • 订货人
  • 滤器
  • 分类过滤器
  • 最初,它们完全按照这个顺序被调用

    orderby被通过了

    [Appetizers, Salads, Soups, Main Dishes, Side Dishes, Desserts, Desserts]
    
    返回

    [Desserts, Appetizers, Salads, Desserts, Side Dishes, Soups, Main Dishes]
    
    未更改地传递到categoryfilter(因为尚未设置任何筛选值)
    categoryfilter再次返回未更改的集合

    选择类别后,仅调用类别格式化程序。
    输入名称(筛选器表达式的值)后,将调用筛选器和categoryfilter格式化程序。 更改名称筛选器值有时仅触发筛选器,有时还会触发categoryfilter格式化程序

    格式化程序的调用顺序始终与它们在标记中的显示顺序相同,但并非每次都调用每个筛选器。角度识别依赖项,并且仅在依赖项值更改时调用筛选器

    编辑 此表达式的结果将传递给
    ng repeat

    ctrl.recipes | orderBy:'name'| filter:{name:ctrl.nameFilterString}| categoryfilter:ctrl.categoryFilterMap

    ctrl.receipes
    将传递给所有筛选器,最后一个筛选器的结果将传递给
    ng repeat

    编辑2 我只是复制以下报告的调查结果:


    我在调试器中确认了该行为。看来你的答案应该稍加修改
    orderBy
    返回其更改的列表并将其传递给
    filter
    ,即使在filter输入文本框中未输入任何内容。然后,
    filter
    处理输入文本框字段值的
    null
    。然后,
    filter
    将列表原封不动地传递给
    categoryfilter
    之后,
    categoryfilter
    将列表传递给
    ng repeat

    Hi Günter,我试图通过调试器在categoryfilter.dart和角度过滤器中放置断点来确认行为:orderBy,过滤器和ng通过Dart编辑器重复,但代码执行不会停止编辑器中的@breakpoints。您是如何确认上述行为的?我不确定您是指带有
    @断点的特殊行为。但除此之外,我就是这么做的。我在Filter、SortBy和CategoryFilter类的
    call()
    方法的第一行设置了一个断点。我以前遇到过几个DartEditor版本在断点处不停止的问题,但如果不是这样的话,它应该可以正常工作。嗨,甘特,看来我有多个Dartium实例在运行,这显然妨碍了调试器的正确执行。关闭所有实例并重新启动后,编辑器以调试模式启动。再次感谢!嗨,甘特,我确认了调试器中的行为,似乎上面的答案应该有一点修正。即使过滤器输入文本框中未输入任何内容,ordBy也会返回其已更改的列表并将其传递给过滤器。然后过滤器处理输入文本框字段值的null。然后过滤器将列表AsIs传递给categoryfilter,然后categoryfilter将列表传递给ng repeat。我希望复制您的评论时您不会介意。