AngularJS为同一个URL路由多个ui-views?

时间:2015-10-06 02:25:19

标签: javascript html angularjs angular-ui-router angular-ui-router-extras

我需要多个ui-views一个URL(我的主页)。 ui-routing的限制是我不能拥有多个<div ui-view></div>,但它们必须处于嵌套状态。

<div class="left-div">
  <div ui-view></div>
  <button ui-sref="1"></button>
  <button ui-sref="2"></button>
  <button ui-sref="3"></button>
</div>

<div class="right-div">
  <button ui-sref="3"></button>
  <div ui-view></div>
</div>

如何制作,以便ui-sref=1ui-sref=2更新内部ui-view

<div class="left-div"></div>

和ui-sref = 3将更新<div class="right-div"></div>

内的ui-view

我在使用ui-router时遇到的问题是,ui-sref1 -> 32 -> 3进行更改后,ui-view的{​​{1}}将会消失,因为left-div更改。URL

我该如何处理?

编辑 - 我当前的状态视图

&#13;
&#13;
chatApp.config(function($stateProvider, $urlRouterProvider) {

    $urlRouterProvider.otherwise('/home')

    $stateProvider

            .state('friend', {
                url: '/friend',
                templateUrl: 'friend.html'
            })

            .state('group', {
                url: '/group',
                templateUrl: 'group.html'
            })

            .state('search', {
                url: '/search',
                templateUrl: 'search.html'
            })

            .state('home', {
                url: '/search',
                templateUrl: 'search.html'
            })

            .state('public', {
                url: '/public',
                views: {
                    'publicView': { templateUrl: 'private-chat.html' }
                }
            });
&#13;
  <div class="col-md-3 left-col-friends" ng-controller="friendListCtrl">

    <div class="friends-list-navigation">
      <div class="option-wrapper">

        <div class="col-xs-3 home-option" ui-sref="public"><i class="fa fa-home fa-2x"></i></div>
        <div class="col-xs-3 friend-option" ui-sref="friend"><i class="fa fa-user fa-2x"></i></div>
        <div class="col-xs-3 group-option" ui-sref="group"><i class="fa fa-users fa-2x"></i></div>
        <div class="col-xs-3 search-option" ui-sref="search"><i class="fa fa-search fa-2x"></i></div>


      </div>
    </div>
    <div class="friends-list-display">
        <div ui-view></div>
    </div>

  </div>

  <div class="col-md-9 middle-col-chat" ng-controller="publicCtrl">
    <div class="bubble-frame-public">
      <div ui-view="publicView"></div>
    </div>


    <div class="input-fields-wrapper" emoji-form emoji-message="emojiMessage">
      <div class="col-md-8">
        <textarea class="col-md-4" id="messageInput" ng-model="emojiMessage.messagetext"></textarea>
      </div>



      <div class="col-md-3">
        <button class="btn btn-default btn-send-public-msg" ng-click="emojiMessage.replyToUser()"><i class="fa fa-paper-plane"></i></button>
        <button class="btn btn-default" id="emojibtn">
          <i class="fa fa-smile-o"></i>
        </button>
        <button class="btn btn-default"><i class="fa fa-video-camera"></i></button>
      </div>


    </div>

  </div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

我猜测publicView是您希望在其他观看次数发生变化时保持不变的观点。这是解决问题的一种方法。

$stateProvider
    .state('home', {
        url: '/home',
        views: {
            '@': {
                templateUrl: 'search.html'
            },
            'publicView@': {
                templateUrl: 'private-chat.html'
            }
        }
    })
    .state('home.friend', {
        views: {
            '@': {
                templateUrl: 'friend.html'
            }
        }
    })
    .state('home.group', {
        views: {
            '@': {
                templateUrl: 'group.html'
            }
        }
    });

默认网址为/home。访问后,publicView将填充private-chat.html,未命名的ui-view将填充search.html

对于friendgroup州,他们单独publicView 不使用新网址,这是我认为你想要的。这是通过使它们成为home的子状态并通过明确指出应该改变哪些视图来实现的。