Angularjs指令2路绑定不工作+延迟问题

时间:2014-03-24 22:07:33

标签: angularjs angularjs-directive angularjs-scope

我遇到以下问题。我有一个search.js控制器,它使用模板results.html。该模板使用类别指令来显示任何公司产品可能具有的所有类别(作为侧边栏)。它还使用多个产品轮播指令来显示每个匹配公司的产品。

在我的search.js控制器中,我定义了一个名为filterCategoryId的范围变量,该变量从null开始。此变量绑定到categories指令以及所有产品轮播指令。这使我期望在任何指令以及search.js控制器中对此变量的更改将使用此变量传播给所有其他指令。该变量用于将产品的显示限制为仅属于该类别的产品。

但是在我的产品轮播指令中,我已经定义了一个范围方法removeFilterCategory(),它将filterCategoryId设置为null。它在自己的范围内工作。我可以看到效果。但它不会影响categories指令的filterCategoryId。我可以告诉,因为我使用ng-class将active类设置为列表项,提及过滤产品的类别ID。但是,将类别指令上的filterCategoryId更改为会传播到产品轮播指令。 在产品轮播指令之前有一个ng-repeat ...

实质上。该变量首先在我的控制器范围内定义。如果我在categories指令上更改它,则更改会在产品轮播指令之后传播(在明显的时间之后)。但是,如果我从任何产品轮播项中更改它,则categories指令不会反映更改。而且我不明白为什么。 产品轮播使用$ watch来检查filterCategoryId并重新计算其行..

所有指令都使用具有相同变量filterCategoryId的隔离范围,并使用'='作为范围值。

可能是什么问题?

即使我在categories指令上更改filterCategoryId,也需要5-6秒才能反映产品轮播指令的变化。

我觉得我在这里遗漏了一些东西。要么我有一个明显的代码错误,我似乎忽略了,或者我错过了一些有棱有角的理解:)。非常感谢任何正确方向的帮助。

1 个答案:

答案 0 :(得分:3)

我建议明确告诉AngularJS使用$scope.apply( function(){/*change var here*/});注册更改,请参阅docs

有一篇很好的文章解释了Angular的摘要周期的详细信息:http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

如果您遇到延迟,这似乎是主要问题,但我也建议确保变量filterCategoryId 总是一个对象,因此它永远不会作为副本传递,也许将其更改为filter.CategoryId等。