使用 angular ui-router 更改 div 的视图

changing the view of the div using angular ui-router

这是我为改变我的观点而编写的代码(url 没有任何变化)

<a ui-sref="chat.menu" ng-click="click1();">Latest</a>
<a ui-sref="chat.menu" ng-click="click2();">Mail</a>
<div ui-view="{{item}}"></div>

var app = angular.module('myApp',['ui.router'])
    .run(['$rootScope','$state','$stateParams', function($rootScope,$state,$stateParams){
        $rootScope.$state = $state;
        $state.$stateParams = $stateParams;
    }]);


app.config(function($stateProvider,$urlRouterProvider){
$urlRouterProvider.otherwise('/');
$stateProvider
    .state('home',{
        url:'/',
        templateUrl:'templates/main.html',
    })
    .state('chat',{
        url:'/chat',
        templateUrl:'templates/chatPage.html',
        controller: 'chatController',
    })
    .state('chat.menu',{
        views: {
            '':{
                template: '<h1>Blank</h1>',
            },
            'latest': {
                template: '<h1>Latest</h1>',
            },
            'mail': {
                template: '<h1>Mail</h1>',
            }
        }
    });
});

app.controller('Controller', function($scope,$state, authentication){
    $scope.item='';
    $scope.click1 = function(){
        $scope.item = "latest";

    }
    $scope.click2 = function(){
        $scope.item = "mail";
    }
});

它工作正常,但问题是我只更改了一次视图。在 ui-view 中加载一个视图后,单击按钮不会加载另一个视图。

我想要的是,当用户单击按钮时,视图应根据按钮的单击而更改,url。

所以我想尝试这样的事情:有两个状态而不是一个。如果只想保留一个状态,则需要将参数传递给该状态,但对于像这样的简单示例,两个状态就可以正常工作:

myApp.config(function ($stateProvider){
    $stateProvider
    .state("latest", {
        url: "#",
        template: "<h1>Latest</h1>",
        controller: "Ctrl1"
      })
    .state("mail", {
        url: "#",
        template: "<h1>Mail</h1>",
        controller: "Ctrl2"
    });
});

我们在这里所做的是在两种状态下将 URL 设置为相同,或者根本不设置 URL。此外,如果您想将控制器分配给您的视图,我们会在此处执行此操作。如果愿意,您可以不分配任何控制器、两个不同的控制器或同一个控制器。

然后像这样设置视图:

<nav> 
    <a ui-sref="latest">Latest</a>
    <a ui-sref="mail">Mail</a>
</nav>

<div ui-view></div>

这是一个有效的 JSFiddle