如何在Angular中制作指令重新渲染视图?

时间:2013-06-12 04:18:25

标签: angularjs scope coffeescript

我想在每次数据更改和每个窗口的resize事件上动态截断文本。

让我们说我有一个HTML:

<p ng-truncate='lines: 2'> Lorem ipsum dolor...</p>

我的指令执行截断,但仍然没有在窗口调整大小时重新截断。

angular.module('moduleName', [])
  .directive 'ngTruncate', () ->
    link: (scope, element, attributes) ->
      // Direcive code here
      $(window).on 'resize', ->
        scope.$apply()
        scope.$digest()

不幸的是,$apply$digest()都不起作用。

此外,我相信我应该以某种方式使用$window ......

2 个答案:

答案 0 :(得分:1)

在调整大小调用$scope$apply之前,$digest可能没有任何变化。

更好地添加一些功能,例如:

function onWindowChange() {
    // do some changes to any 
    // attributes of scope
    // and than apply them
    scope.$digest()
}

// and call it on window resize
$window.resize(onWindowChange);

或者你可能会有改变的功能 任何范围attr,你呼吁许多人 不同的事件,$scope.$watch这个attr 并在变更时致电$scope.$digest

如果你在这里贴出整个指令代码,也许会更容易回答......

答案 1 :(得分:0)

是 - 您可以使用$window属性来监视窗口大小的变化。

这是fiddle

可以找到原始讨论here(从那里挑选小提琴)