即11 + angularjs没有从angular.element(“#idName”)找到范围

时间:2015-01-19 13:21:17

标签: javascript angularjs internet-explorer

今天我遇到了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兼容模式,看看这是否能解决这个问题,但这根本没有用。

有没有人有建议

1 个答案:

答案 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加载后执行。