在angularjs Controller中注入$元素

时间:2013-12-20 13:42:50

标签: angularjs dom angularjs-directive

首先,我已经阅读了数百万条帖子,说你不应该从Angular中的Controller更新DOM元素。我知道。

尝试使用angular-timer指令(倒计时)时。我遇到了一些问题,所以最后,通过插件开发人员的帮助,我们做了这个plunker,它正在工作并满足我的要求。

http://plnkr.co/edit/CWXnKMbygVDMc8xzshZa?p=preview

然而,当将此代码移动到我的应用程序时,我将$元素添加到控制器时出现了下一个错误:

 `Error: Unknown provider: $elementProvider <- $element`

我阅读了很多帖子,我知道它可以注入,但我不知道为什么它在我的应用程序中无效。

另一方面,我喜欢做正确的事情,所以我不喜欢实施一些不好的做法。所以,如果你有更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:1)

看起来很难用jQuery解析DOM,我不明白你为什么不在ng-repeat中使用timer指令。

这是一种方法,只需添加eleapsedTimers范围的额外数组,然后使用ng-repeat

显示
 $scope.elapsedTimers=[];

$scope.$on('timer-stopped', function (data) {
    /* loop through bookings to find one that just stopped*/
    var now = new Date();
    angular.forEach($scope.bookingsList, function (item) {
        if (!item.elapsed) {
            if (item.booking_date <= now) {                  
                item.elapsed = true;
                $scope.$apply(function () {
                    $scope.elapsedTimers.push(item)
                });
            }
        }
    });
});

HTML

<div id="result">
  <div ng-repeat="item in elapsedTimers">ID {{item.id}} elapsed</div>
</div>

DEMO

注意......这会将新属性elapsed添加到预订对象。如果这是一个问题,可以创建解决方法