2

我试图写一个分页指令,但要做到这一点,我需要知道有多少元素被嵌入,所以 HTML 看起来像这样

<pagelister>
    <div ng-repeat="name in searchResults">{{name}}</div>
</pagelister>

(这是一个简单的例子——被嵌入的代码可能是任意复杂的。)

该指令必须注意……某些东西,因此它可以重新计算页数。

编辑对不起,代码没有被称为代码。我希望上面的代码将列表中的名称分解为 10 长的页面,并添加一些不错的下一个/上一个按钮。

问题是当link指令的函数被调用时,div 还没有被展开。我通过推迟对 DOM 的更改来“修复”该问题——但这仅在一次有效。如果 $scope.searchResults(或嵌入代码观察到的任何其他内容)发生变化,我需要重新调整 DOM。我只需要知道那是什么时候。

4

3 回答 3

0

使用指令范围绑定将 nessasry 信息传递给指令怎么样?

有点儿:

<pagelister pages="searchResults"> ... transcluded template</pagelister>
...
scope: { pages: '=' },
link: function(scope, element, attrs) { 
  scope.$watch('pages', ...)
于 2013-01-05T14:19:13.760 回答
0

如果您的指令没有创建自己的子范围或自己的隔离范围,则该指令将有权访问 searchResults 数组。链接功能可以简单的看长度:

link: function(scope, element, attrs) {
    scope.$watch('searchResults.length', function(newLength) { ... } );
于 2012-12-30T04:19:49.223 回答
0

我通过在指令上设置一个属性来告诉它要观察什么来实现这一点 - 因此指令中没有依赖项(除了 attr)。

 :parent controller
 $scope.searchResultsLength = searchResults.length (or anything you choose || or an empty object)

:html
 <pagelister pages="searchResults" watch="searchResultsLength">

:inside directive controller
return {        
    replace: false,
    transclude: true,
    scope: true, //important
    controller: function($scope, $element) {
            $scope.$watch($element[0].getAttribute("watch"), fn);
 ...

这远非想法,但这意味着我可以在任何地方删除这个指令,它会包装我的 ng-repeat 并管理自动更新

于 2013-09-13T13:18:39.120 回答