ui-router多視圖+嵌套視圖+傳參綜合練習


ui-router多視圖:頁面上存在的多個ui-view,它們以名字區分;

嵌套視圖:一個ui-view的一個狀態下對應了一個html,這個html里面又有一個ui-view。

視圖之間傳參:用ui.sref="stateName({data:'123'})"或者$state.go("stateName",{data:123});

傳參的時候目標視圖的state中要定義接收的參數params如url:"/home?data"或者params:{data:null};

在目標視圖的控制器用$stateParams.data接收。

狀態名代表一個狀態,自定義的名字,url對應地址欄中的地址,views的名字對應ui-view的名字。

 

文件列表:index.html,home.html,home1.html,chat.html,our.html;

index.html內容如下:

<!DOCTYPE html>
<html ng-app="myApp">
    <head>
        <meta charset="UTF-8">
        <title>ui-view</title>
    </head>
    <body ng-controller="myCtrl">
        <div ui-view></div>
<a ui-sref="homestate.home1({h1:'home-home1'})">跳到home1頁面</a> <a ui-sref="chatstate({data:'home-chat'})">跳到chat頁面</a> <a ui-sref="ourstate">跳到our頁面</a> <button ng-click="goour()">index下的按鈕跳轉到our</button> <p>v1狀態:</p> <div ui-view="v1"></div> <p>v2狀態:</p> <div ui-view="v2"></div> </body> <script src="http://lib.baomitu.com/angular.js/1.6.4/angular.min.js"></script> <script src="http://lib.baomitu.com/angular-ui-router/1.0.3/angular-ui-router.min.js"></script> <script type="text/javascript"> var app = angular.module("myApp",["ui.router"]); app.config(function($stateProvider, $urlRouterProvider){ $urlRouterProvider.when('',"/home"); $stateProvider .state('homestate', { url: "/home",//控制地址欄跳轉的地址 views:{ //"","v1","v2"是ui-view的名字 "":{ controller:"homeCtrl", templateUrl: 'home.html' }, "v1":{ template:"<p>homestate狀態</p>" } } }) .state("homestate.home1",{ url:"/home1/?h1?id", //params:{h1:null,id:null},//寫法同上; views:{ "":{ controller:function($scope,$stateParams){ console.log($stateParams.h1);//ui-sref傳參 console.log($stateParams.id);//state.go傳參 }, templateUrl: 'home1.html' }, //由於home1是home的子頁面,所以v1和v2頁面設置是無效的,因為v1和v2不在home頁面里而是在index頁面 } }) .state("homestate.home2",{ url:"/home2", views:{ "":{ controller:function($scope){ // console.log($stateParams.h1); }, template: '<h2>我是home的子頁面home2</h2>' }, } }) .state("chatstate",{ url:"/chat", params:{data:null}, views:{ "":{ controller:function($scope,$stateParams){ console.log($stateParams.data); }, templateUrl: 'chat.html' }, "v1":{ template:"<p>chatstate狀態</p>" } } }) .state("ourstate",{ url:"/our", params:{"id":null},//或者url:"/our:id" views:{ "":{ controller:function($scope,$stateParams){ console.log($stateParams.id); }, templateUrl: 'our.html' }, "v2":{ template:"<p>ourstate狀態</p>" } } }) $urlRouterProvider.otherwise('/home'); }); app.controller("myCtrl",function($scope,$state){ $scope.goour = function (){ $state.go("ourstate",{id:"index-our"}); } }); app.controller("homeCtrl",function($scope,$state){ $scope.goour = function (){ $state.go("ourstate",{id:"home-our"}); }; $scope.gohome1 = function(){ $state.go("homestate.home1",{id:"home-home1"}); }; $scope.gohome2 = function(){ $state.go("homestate.home2",{id:"home-home2"}); } }); //注釋:多視圖views可以實現多個ui-view,根據地址或狀態的不同使這幾個ui-view分別顯示不同內容(也可以不顯示),而且這幾個狀態是同級關系 //而嵌套視圖的子視圖是在父視圖下的,父視圖下應該有ui-view </script> </html>

 

home.html內容如下:

<h1>我是home界面</h1>
<button ng-click="gohome1()">跳轉home1</button>
<button ng-click="gohome2()">跳轉home2</button>

<button ng-click="goour()">跳轉our</button>
<div ui-view></div>

home1.html內容如下:

<h2>我是home的子頁面home1</h2>

chat.html內容如下:

<h1>我是chat頁面</h1>

our.html內容如下:

<h1>我是our界面</h1>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM