Как заменить дочерний вид другим в AngularJS

0

У меня есть SPA, написанный в AngularJS. На главной странице используется атрибут ng-include для определения вида загрузки. Это устанавливается в JavaScript, когда кто-то нажимает на меню, которое содержится на главной странице. Однако я столкнулся с ситуацией, когда мне нужно загрузить другое представление, нажав кнопку в другом представлении, существенно заменив его.

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

Дело в том, что это не работает. Я установил свои точки останова и прошел через код, но всегда получаю эту ошибку:

Ошибка: [ngModel: datefmt] http://errors.angularjs.org/1.5.7/ngModel/datefmt?p0=2009-07-21T00%3A00%3A00

Здесь код в моей родительской странице:

$rootScope.$on('viewChanged', function () {
    var menuItem = {
        template: 'customerOrders.html' // will be eventually dynamic
    };

    navigate(menuItem);
});

function navigate(menuItem) {
    $scope.activeMenuItem = menuItem;
}

<div data-ng-include="activeMenuItem.template"></div>

В контроллере дочерней страницы:

function changeSelectedView(viewTemplate) {
    $rootScope.$emit('selectedViewChanged', viewTemplate);
}

Очевидно, что я делаю что-то не так. Как я могу выполнить то, что хочу, или есть совершенно другой способ сделать это?

  • 0
    ваша ошибка, кажется, не имеет отношения к вашему вопросу, хотя
  • 0
    Я знаю, это не имеет никакого смысла
Показать ещё 1 комментарий
Теги:

2 ответа

2

вы можете использовать ng-route для работы между представлениями. проверьте https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider

  • 0
    Это актуально, когда я не использую маршрутизацию? Это одностраничное приложение.
  • 0
    @DesertFoxAZ да. ng-route не меняет страницу. Это просто меняет взгляды на странице. Вы можете переключаться между несколькими представлениями в SPA с помощью некоторого ввода.
0

Прежде всего, имя события в функции $ emit и в функции $ on не совпало, поэтому я сделал это исправление.

function navigateToNewTemplate(event, viewTemplate) {
    var menuItem = {
        template: buildTemplateUrl(viewTemplate)
    };

    navigate(menuItem);
}

$rootScope.$on('selectedViewChanged', navigateToNewTemplate);

function changeSelectedView(viewTemplate) {
    $rootScope.$emit('selectedViewChanged', viewTemplate);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню