听起来很复杂,但我希望这里有人比我更有经验,可以毫不费力地整理以下内容。
为了正确看待这一点,这一切都与分页部分有关,如下所示:有一个控制器通过 ajax 请求从测试页中提取一些初始数据对象。这些数据对象与每个"小狗块"有关 - 它们用正确的数据填充小狗块指令的"小狗块"模板。
这些块使用 ng 重复显示(重复拉取的数据对象数( - 这表示一个页面。
分页是独立的,只是通过不同的 ajax 请求修改控制器数据。
我这里有这个ng-repeat
:
<div class="puppiesContainer" ng-repeat="p in puppies track by $index">
<puppy-block></puppy-block>
</div>
其目的是多次重复指令<puppy-block></puppy-block>
指令模板是这样的:
<div class="puppyA" preview-pup>
<div class="clearfix puppyCover" dataPreview="{{p.dataPreview}}">
<a ng-href="{{p.link}}"><img ng-src="{{previewData[currentPosition]}}" /></a>
</div>
</div>
如您所见,每个元素上都有另一个称为 preview-pup
的指令。该指令的代码是这样的:
obApp.directive('previewPup', ['$timeout',function($timeout){
return {
restrict: 'A',
link: function(scope, el, attr){
//some code that needs to run often
}
}
}]);
在不同页面之间移动时,我的分页指令会更改 puppy-block
指令的数据,但是当更改发生时,我还需要在每个 puppy-block
指令内触发 preview-pup
指令的链接功能。分页指令和 ng-repeat 指令都有一个公共控制器,它们从中提取数据(修改数据(。
我的问题是我不知道如何在ng-click
上手动触发指令的链接函数,例如。我该怎么做?
好的,找到了一个解决方案:
将$routeScope
注入控制器和要触发更改的指令。使用它来通知子指令父控制器中的更改。有关更多详细信息 - 如果有人偶然发现这个问题寻找类似的东西 - Angular.js触发另一个指令
我遇到了同样的问题。从 ng-repeat 中删除"按$index跟踪"为我修复了它。不幸的是,我还不知道为什么。