2015-09-23 3 views
1

Я установил контроллер, в котором я вызываю функцию, определенную в службе.Невозможно прочитать свойство 'style' of null - angularjs

angular.element(document).ready(function() { 
    FilterDataService.checkForFilters($scope.mediaTypeList, 'filterAddMediaType'); 
    }); 

Ниже функция:

this.checkForFilters = function(list, filterSection) { 
    if (list < 1) { 
    document.getElementById(filterSection).style.display = 'none'; 
    } 
    else { 
    document.getElementById(filterSection).style.display = 'inline-block'; 
    } 
}; 

У меня никаких проблем не звонить и получать результаты от этой функции после того, как мой взгляд, и контроллер загружается. Однако, когда я называю эту функцию просмотра страницы + нагрузки контроллера я получаю следующую ошибку

TypeError: Cannot read property 'style' of null 

Ошибка этой линии

document.getElementById(filterSection).style.display = 'none'; 

я понял вопрос, потому что я пытаюсь установить стиль на элементе div, который еще не загружен, поэтому я поставил следующее:

angular.element(document).ready(function() {... 

Однако это не решило мою проблему. Что я делаю не так?

EDIT: Я также попытался следующие:

angular.element('#' + filterSection).ready(function() { 
     document.getElementById(filterSection).style.display = 'none'; 
    }); 
+0

Проверьте, находится ли загруженная страница содержит 'filterAddMediaType' div – SANN3

+1

Вы используете угловой так же, как и jQuery. Только не надо. Прекратите делать манипуляции с DOM. Определите модель и используйте ng-show в вашем представлении, чтобы показать и скрыть элементы на основе значений модели: '

...
' –

+0

@ SANN3 Я проверил и у этого есть этот элемент. – ocajian

ответ

0

Рассмотрите возможность использования ngClass вместо традиционного способа JQuery. Что-то вроде этого должно работать.

<div ng-class="[{'display-none-class' : $scope.mediaTypeList && 
$scope.mediaTypeList.length > 0}, 
{'display-inlineb-class' : !$scope.mediaTypeList || 
$scope.mediaTypeList.length === 0}]"></div> 
0

После получения справки от @JB Nizet я придумал следующее решение. Первоначально я пытался достичь своих результатов, используя манипуляции с домом, которая не является угловым способом.

Это то, что я сделал, чтобы исправить это:

вызов функции контроллера:

$scope.filterAddSectionSource = FilterDataService.checkForFilters($scope.mediaTypeList); 

функция обслуживания:

this.checkForFilters = function(list) { 
    if (list < 1) { 
    return false; 
    } 
    else { 
    return true; 
    } 
}; 

Дом элемент:

<div class="filterInfoSection" id="filterAddSectionSource" ng-show="filterAddSectionSource"> 
Смежные вопросы