javascript - 使用 angular ui-router 更改 div 的 View

标签 javascript angularjs angular-ui-router angular-routing

这是我为了改变我的观点而编写的代码(不改变 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";
    }
});

它工作正常,但问题是我只更改了 View 一次。一旦在 ui View 中加载了一个 View ,则单击按钮时不会在其中加载另一个 View 。

我想要的是,当用户点击按钮时, 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。此外,如果您想将 Controller 分配给您的 View ,我们会在此处执行此操作。如果愿意,您可以不分配任何 Controller 、两个不同的 Controller 或同一个 Controller 。

然后像这样设置你的 View :

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

<div ui-view></div>

这是一个有效的 JSFiddle

关于javascript - 使用 angular ui-router 更改 div 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39040779/

相关文章:

angularjs - 如何让浏览器的后退按钮带我到以前的 URL? ( Angular 用户界面路由器)

angularjs - UI-路由器 : Can I get always the same controller?

javascript - 为什么在 JavaScript 中,如果有一个方法 ReplaceAll() 可能会更好?

javascript - 调整所有动态生成的段落的大小

javascript - xmlHttpRequest 卡在就绪状态 1

html - Angular Material Design 工具栏 - 格式问题

javascript - AngularJS ngRoute 抛出未捕获错误 : [$injector:modulerr]

javascript - 具有多个 View 和 Controller 实例化的 Angular ui-router 状态

JavaScript 检查属性是否定义

javascript - 将对象作为参数传递给指令