在 IE 11 中,我有一个 Angularjs 1.5 模态组件,如下所示。模式打开,在渲染事件中,它使用该组件中包含的回调函数调用角度应用程序外部的函数。这个外部函数启动一个安装过程,启动一个嵌入对象,如下所示,然后定期调用回调函数。
我遇到的问题是模板中从嵌入对象调用调用的每个回调函数上的绑定没有更新。 console.log 被执行,我可以在控制台中看到该消息。
绑定最初是用“启动过程”更新的,因此绑定是正确的
<span ng-bind="$ctrl.messages[$ctrl.messages.length - 1]"></span>
我尝试按如下方式调用scope.app,但没有任何反应。仅当启动进程完成时,绑定才会使用最终回调调用中显示的最后一条消息进行更新。因此,initiateprocess 函数会阻止绑定,但不会阻止 console.log 的
这是处理多个回调和更新绑定的正确方法吗
angular.module('components')
.component('testModal', {
bindings:{
modalInstance: '<',
resolve: '=',
dismiss: '&',
close: '&'
},
controller: TestController,
templateUrl: 'scripts/components/TestModal.html'
});
TestController.$inject = ['$scope'];
function TestController($scope) {
var ctrl = this;
ctrl.$onInit = function(){
ctrl.messages = [];
ctrl.messages.push('starting process');
};
ctrl.modalInstance.rendered.then(function(){
CallVanillaJSFunction(callback);
});
function callback(message){
ctrl.messages.push(message);
console.log(ctrl.messages[ctrl.messages.length - 1]);
CheckScopeBeforeApply();
}
function CheckScopeBeforeApply() {
if(!$scope.$$phase) {
$scope.$apply();
console.log('scope applied');
}
};
}
香草函数
var globalCallback;
function CallVanillaJSFunction(callback){
globalCallback = callback;
var complete = initiateprocess();
globalCallback(complete);
}
嵌入对象
<OBJECT ID="testObj" CLASS......
<SCRIPT language=javascript for=testObj event="OnEvent(message);">
if(navigator.userAgent.indexOf("Trident") != -1)
{
globalCallback(message);
}
</SCRIPT>
这个问题已被标记为重复,但查看了重复项后,我认为它不一样。全局回调函数可以被多次调用,而 Angular 应用程序不知道它会被调用多少次。