關於js單頁面實現跳轉原理以及利用angularjs框架路由實現單頁面跳轉


還記得我們剛開始學習html時使用的錨節點實現跳轉嗎?

<a href="#target">我想跳轉至目標位置</a>

<p>第一條</p>

....  
<p id="#target">我是目標位置</p>

...

在js中實現跳轉也是利用了這一點,下面直接在代碼中解釋吧:

 1  <body>
 2     <ul>
 3         <li><a href="#/music">音樂</a></li>
 4         <li><a href="#/friend">朋友</a></li>
 5     </ul>
 6     <div id="view">
 7         <!--頁面上需要修改的內容-->
 8     </div>
 9     </body>
10     <script>
11  window.addEventListener('hashchange', function(){   //hashchange 事件在當前 URL 的錨部分(以 '#' 號為開始) 發生改變時觸發 。
12        console.log(location.hash);  //輸出結果見下圖:
13        var view=document.getElementById('view');  //獲取頁面中想要插入元素的id
14        switch(location.hash){
15          case '#/music':            //利用switch case來判斷當前點擊的錨節點是什么 ,同時設置相應的內容
16          view.innerHTML='音樂';
17          break;
18          case '#/friend':
19          view.innerHTML="朋友";
20          break;
21        }
22  })
23     </script>

接下來是在angulajs框架里如何使用路由切換實現單頁面跳轉:

直接代碼中解釋好了:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body ng-app="myApp">
 8     <ul>
 9         <li><a href="#/first">第一種方式</a></li>
10         <li><a href="#/second">第二種方式</a></li>
11         <li><a href="#/third">第三種方式</a></li>
12         <li><a href="#/fourth">第四種方式</a></li>
13     </ul>
14     <div ng-view>
15         <!--頁面上需要修改的內容-->
16     </div>
17 </body>
18 <script src="../../angular-1.5.8/angular.js"></script>
19 <script src="../../angular-1.5.8/angular-route.js"></script>
20 <script>
21    // 創建模塊
22    var app=angular.module('myApp',['ngRoute']);
23 
24    //寫路由表
25    app.config(function($routeProvider){
26        $routeProvider
27         .when('/first',{
28            template:'<h1>第一種方式:直接寫入進來</h1>'
29        })
30        .when('/second',{
31            template:'<h1>{{secondWay}}</h1>',
32            controller:function($scope){ //這里是匿名的控制器
33              $scope.secondWay='第二種方式:使用匿名的controller的方式'
34            }
35        })
36        .when('/third',{
37            template:'<h1>{{thirdWay}}</h1>',
38            controller:'myCtrl'   //第三種方式:使用命名的myCtrl的控制器寫入
39        })
40        .when('/fourth',{
41         templateUrl:'mytemplate.html',
42        controller:'myCtrl2'
43        // 第四種方式:angularjs跳轉到模板所在路徑實現方法
44        })
45        //以下為當我們在地址欄輸入錯誤的路徑時處理的結果
46        // .otherwise({
47        //   template:'<h1>{{extraError}}</h1>',
48        //   controller:function($scope){
49        //     $scope.extraError='這里是路徑錯誤時產生的文字';
50        //   }
51        // })
52        //
53        //不過一般我們會默認的讓它跳轉到一個頁面
54         .otherwise({
55             redirectTo:'/first' //默認第一個單頁面
56         });
57    })
58    
59    //對應上面的第三種方式:有控制器名稱的用法
60    app.controller('myCtrl',function($scope){
61      $scope.thirdWay='第三種方式:這是使用有名字的控制器的方法';
62    });
63    //對應上面的第四種寫法:有控制器名稱並鏈入模板頁面
64    app.controller('myCtrl2',function($scope){
65      $scope.fourthWay='第四種方式:這是從外部html模板中獲取的數據';
66    });
67 </script>
68 </html>
View Code

重要補充說明:

1.第四種方式需要在額外創建一個名為"mytemplate.html"的頁面

(因為templateUrl屬性值是一個url路徑,路徑指向一個html模板,html模板會填充(或替換)指令內容):

頁面內容為:

2.在設置ng-app(angualar作用范圍)時注意是放在body里面,我一開始放在了ul里,結果導致報錯.

3.其次注意需要使用當有服務的代碼編輯器打開,(webStorm可以)即地址欄是http://localhost:63342/...

如果直接打開,或者在(sublime)中運行,即以:file:///D:/ ...  就不是在服務器上運行那么它就會出錯:顯示:mytemplate.html那個頁面無法加載:

個人理解,如有不足,希望各位大神留言補充~

 


免責聲明!

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



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