2014-10-29 2 views
0

Мой основной HTML, как:Обновить директиву angularjs после загрузки страницы ajax?

На домашней странице, я нажимаю, чтобы перейти на другую страницу, которая просто меняет содержание #page_content с помощью JQuery, короче говоря что-то вроде:

gl.prototype.pageNav = function(page) { 
    $.ajax({ 
     url: page, 
     success: function (data) { 
      $('#page_content').html(data); 
     } 
    }); 
} 

На одной подстранице, у меня есть угловая директива используется:

<div id="awesomeSubPage" ng-my-sub-directive></div> 

Однако, кажется, что директива не дозвонилась после Аякса навигации по страницам, его действительно дозвонились, если я иду прямо на страницу, как: site.com/myApp/awesomeSubPage

Код для директивы:

myApp.controller('ContentCtrl', function($scope) { 
    // commented out 
}.directive('ngMySubDirective', function() { 
    return { 
     link: function(scope, elem, attrs) { 
      elem.on('load', function() { 
       console.log('Run ngMySubDirective postMessage'); 
      }); 
     } 
    } 
}); 

Любые идеи?

ответ

0

Есть ли конкретная причина, по которой вы используете jQuery для изменения содержимого? Если вы создаете приложение AngularJs, вы можете просто использовать модуль маршрутизации Angularjs для отображения другого вида.

Причина, по которой директива не работает в вашем случае, заключается в том, что с помощью jQuery вы находитесь за пределами «Углового мира». Поэтому Angular не знает, что контент изменился. Вы можете позвонить $scope.$apply, если вам действительно нужно. Вы также можете просто заменить этот вызов $.ajax с вызовом с использованием $http как упомянуто here

+0

Это приложение ZF2, что мы закончили с JQuery и начал добавлять угловой, но потребуется некоторое время, прежде чем мы сможем полностью удалить JQuery вещи (много зависимостей и т. д.) – dan2k3k4

+0

Обновленный ответ. Если возможно, замените только вызов ajax. Если это невозможно, вызовите $ scope. $ Примените себя после вызова ajax. – codemonkey

+0

Когда я пытаюсь заменить '$ .ajax' на' $ http' - я получаю '$ http not defined' - как я могу добавить угловое выражение в свой пользовательский JS? Поскольку у нас есть один файл, который был в основном jQuery, а теперь еще один файл, который обрабатывает angularjs, мне нужно сначала назвать имя приложения? как 'myApp. $ http'? – dan2k3k4

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