Ошибка с $state.go при использовании ui-route, когда url изменяется на новое состояние, но не может видеть изменение html с новым содержимым представления

У меня есть сценарий, где у меня есть главная страница, то есть index.html с 2 представлениями (leftview) View1.html и (rightview) view2.html, но при выборе записи в левом просмотре я хочу изменить правое представление с view2.html на view3.html.

я использую

$scope.$state.go('reg.detail', { 'id': item.Id });

изменить представление с View2.html на View3.html

Но я вижу изменения URL в details/{id} но я не вижу изменения пользовательского интерфейса (html-разметки) в view3.html (следовательно, контроллер view3 также не запускается (для простоты удалил код контроллера ниже))

var app = angular.module('app', ['ui.router']);

(function () {
    'use strict';

    angular
        .module('app')
        .config(['$stateProvider', '$locationProvider', '$urlRouterProvider',
            function ($stateProvider, $locationProvider, $urlRouterProvider) {
                $urlRouterProvider.otherwise('/');
                $stateProvider
                .state('reg', {
                    url: '/',
                    views: {
                        'leftPanel': {
                            templateUrl: 'app/View1.html',
                            controller: 'view1Ctrl'
                        },
                        'rightPanel': {
                            templateUrl: 'app/View2.html',
                            controller: 'view2Ctrl'
                        }
                    }
                })
                .state('reg.detail', {
                    url: 'detail/:id',
                    parent: 'reg',
                    templateUrl: 'app/View3.html',
                    controller: 'view3Ctrl'
                   
                })

            }]);

})();


(function () {
    'use strict';

    angular
        .module('app')
        .controller('appCtrl', appCtrl);

    appCtrl.$inject = ['$scope', '$rootScope','$state'];

    function appCtrl($scope, $rootScope, $state) {


    }
})();
index(main) page code :
<div auto-size>
    <div ui-view="leftPanel" >Left panel is loading...</div>
    <div ui-view="rightPanel" >Right panel is loading...</div>
</div>

Любая помощь будет высоко ценится. Не стесняйтесь спрашивать меня больше кода, если требуется.

1 ответ

Первый путь - это поставить цель ui-view в представлении 2:

<div>

  <h3>View 2</h3>

  <hr />
  // placeholder in the view 2 for view 3
  <div ui-view=""></div>

</div>

Есть рабочий пример

Второй - нацеливание на заполнитель корневого представления. 'rightPanel@' в детском состоянии 'reg.detail':

.state('reg.detail', {
      url: 'detail/:id',
      parent: 'reg',
      views : {
        // this will really replace the view 2 with view 3
        'rightPanel@': {
          templateUrl: 'app/View3.html',
          controller: 'view3Ctrl',
        }
     }
})

Есть рабочий пример

Прочтите что-нибудь об абсолютном именовании (нацеливание отличается от родительского пользовательского интерфейса), например, здесь пользовательский интерфейс Angularjs не достигает дочернего контроллера

Другие вопросы по тегам