1

我有一个带有Webshim的 Angular 应用程序,主要用于在旧浏览器中添加日期选择器。我正在使用这个:

$scope.$on('$viewContentLoaded', function(target) {
    setTimeout(function() {
        $('#partials').updatePolyfill();
    }, 0);
});

在视图更改时更新 DOM。

但是我有几个页面在内部包含ng-if用于在某些其他字段处于特定状态时显示某些字段的部分,并且当“$viewContentLoaded”发生时这些部分不在 DOM 中,不会添加 polyfill。该ng-if逻辑由模型更改驱动,因此理想的情况是,如果有某种方法可以生成“afterAllModelChanges”事件,那么无论ng-if存在何种特定逻辑,都可以使用上述技术。

有没有?或者有没有更好的方法来解决这个问题?

4

1 回答 1

2

经过几个小时的谷歌搜索和试验,这就是我最终得到的。我的索引页中有这个:

$.webshims.polyfill('es5 forms forms-ext');

并将此指令添加到我的项目中:

eepDirectives.directive('input', function() {
    return {
        restrict: 'E',
        priority: -1,
        link: function(scope, element, attrs) {
            if (attrs.type == 'date') {
                // Doesn't appear to need a setTimeout when used like this
                $(element).updatePolyfill();
            }
        }
    };
});

我只对<input type="date" .../>字段感兴趣,因此该指令仅限于input元素,然后进一步过滤该类型。

这会更新 polfill,但输入字段会添加到 DOM,因此适用于ng-if已变为 true 的情况以及加载视图时。

于 2015-06-11T11:33:58.787 回答