如何获取 Webshim 的 updatePolyfill 调用由 Angular "ng-if" 添加的元素

How to get Webshim's updatePolyfill called for elements added by an Angular "ng-if"

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

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

在视图更改时更新 DOM。

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

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

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

$.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,因此适用于已变为 true 的 ng-if 以及加载视图时。