2013-04-25 2 views
22

$viewContentLoaded никогда не срабатывает в моем угловом контроллере.

function MyController($scope) 
{ 
    $scope.$on('$viewContentLoaded', function() 
    { 
     alert("blah"); 
    }); 
} 

Никогда не попадает в точку останова и никогда не вытаскивает предупреждение. Я думаю, что это довольно стандартное использование, поэтому я не уверен, что это может быть, но это определенно не стреляет. Все остальное в контроллере ведет себя правильно.

Что может вызвать это?

+1

Все, что в консоли ошибок? – Jordan

+1

@MikePateras Вы инициируете контроллер на ваш взгляд? –

+1

Иордания, ничего в консоли (никаких ошибок или предупреждений вообще). RickCigarette, я привязываю его в html через ng-controller, если это то, что вы имеете в виду. –

ответ

23

Base на ваш комментарий выше, это звучит, как у вас есть что-то вроде этого:

<ng-view> 
    <div ng-controller="MyController"></div> 
</ng-view> 

я не уверен, что содержание в нг вида тега будет делать, но $viewContentLoaded является излучаемый из область просмотра ng-view. Это означает, что он поднимается только от ng-view, и, таким образом, ваш контроллер никогда не поймает его.

+4

Yup, просто понял, что сам, и действительно, он работает, когда контроллер находится вне ng-view. Оказывается, что я хотел, это includeContentLoaded. Благодаря! –

3

Я решил это, указав контроллер в поставщике маршрутов app.js вместо использования ng-контроллера в div в представлении. Я использую этот метод только в том случае, если мне нужно использовать $ viewContentLoaded, иначе я использую ng-controller.

angular.module('myapp', [...]) 
.config(function ($routeProvider, $locationProvider) { 
    $routeProvider 
     .when('/MyRoute', {templateUrl: 'views/MyView.html', controller: MyController}) 
    }); 
+0

Это единственное решение, которое помогло мне, спасибо! – mrgoos

38

Попробуйте вместо этого:

function MyController($scope) 
    { 
     $scope.$watch('$viewContentLoaded', function() 
     { 
      alert("blah"); 
     }); 
    } 
+2

Это работает для меня. Спасибо –

+4

это не работает. DOM еще не показывается с помощью css. Мне пришлось обернуть 'alert ('blah')' в '$ timeout (fn, 0)', чтобы получить полностью отображаемую страницу. Взгляд загружен, еще не разобран угловым. – chovy

+2

chovy, yea. зависит от того, что вы пытаетесь сделать. Вы, возможно, придется сделать это вместо того, чтобы, если вы хотите ждать CSS для загрузки и т.д. $ сфера. $ часы ('$ viewContentLoaded', функция() { \t \t \t \t \t $ таймаут (функция() { \t \t \t \t \t \t \t оповещения ("бла"); \t \t \t \t \t \t}, 500); \t \t \t \t}); – CodeOverRide

Смежные вопросы