今天我遇到了IE 11和AngularJS的一个问题,我希望有人见过它。
我正在引导我的角度应用程序并在模态中搜索id元素集作为占位符,并根据应用程序状态将模板视图加载到ng-view中。在Chrome和IE 10中,这很好用。但是,在IE 11中,这并不是。我得到的错误是
Unable to get property 'reloadAndChooseView' of undefined or null reference
undefined或null应该是调用
时找到的范围function chooseView(angular) {
var scope = angular.element('#edit-listing-page').scope();
scope.reloadAndChooseView();
}
一旦应用程序被引导,我调用chooseView,它通过dom查找元素id并拉出调用reloadAndChooseView()函数的范围。这只是选择一个路线并将模板加载到ng-view。
下面是用于引导我的应用程序的函数
var boostrap = function (angular) {
angular.element(document).ready(function () {
angular.bootstrap(document.getElementById("edit-listing-page"), ['app']);
});
};
如上所述,这不是Chrome,IE10或Firefox中的问题。这似乎只是IE 11的一个问题。
我尝试将X-UA兼容设置为IE 10,9和8兼容模式,看看这是否能解决这个问题,但这根本没有用。
有没有人有建议
答案 0 :(得分:1)
在IE被禁止的情况下,我倾向于在可用时使用vanilla Javascript。
在您的情况下,您可以尝试以下方法,以确保正确选择元素:
var foo = document.getElementByID('edit-listing-page');
var el = angular.element(foo);
您可能还想尝试将选择器函数包装在$timeout
中(请务必首先包含#timeout
作为控制器参数):
angular.controller('fooCtrl', function($timeout, $scope) {
$timeout(function() {
//No need to re-declare 'angular' in the arguments list
var el = document.getElementByID('edit-listing-page');
var scope = angular.element(el).scope();
scope.reloadAndChooseView();
}, 0);
})
这将确保您的代码仅在DOM加载后执行。