2013-08-16 95 views
1

我有以下頁面:AngularJs。路由。處理服務器請求。幾個問題

<!doctype html> 
<html lang="en" ng-app="myModule"> 
<head> 
    <meta charset="utf-8"> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script> 
    <script> 

     var myModule = angular.module('somename', []); 

      myModule.config(function ($routeProvider) { 
      $routeProvider. 
        when('/zzz', {templateUrl:'' , controller: TestCtrl}). 
        when('/test1', {template:' ', controller: TestDataCtrl}). 
        when('/test2', {template:'/abc ', controller: function TestCtrl1() {alert("test2")} }). 
        when('/test/:userid', { controller: TestDataCtrl }). 
        when('/users/:userid', {templateUrl: '/users/:userid?html=true', controller: UserDataCtrl}). 
        otherwise({redirectTo: '/works'}); 

     }); 

     function TestCtrl($scope) { alert("test") } 

     function UserDataCtrl($scope, $http) { 
    ... 
     } 

     function TestDataCtrl($scope, $http, $routeParams, $route) { 
      $http.get('users/1').success(function (data) { 
      console.log("UserDataCtrl"); 
      $scope.user = data; 
     }); 

     } 

    </script> 
</head> 
<body ng-app="myModule"> 
<div ng-view></div> 

{{1+1}} 
</body> 
</html> 

1),當我瀏覽到以下網址http://localhost:7000/service/1#/test1 是永諾發送兩個請求到服務器(在我的情況REST服務),東西 像http://localhost:7000/service/1http://localhost:7000/archivarius/users/1。我能以某種方式處理第一個(無用的)瀏覽器請求,也許使用AngularJs控制器?我的意思是當用戶輸入url http://localhost:7000/service/1#/test1唯一的東西(請求)應該發生在test2控制器。可能嗎?

2)在路由配置中,爲什麼我必須指定template或templateUrl?爲什麼我不能只爲路線指定控制器?

+0

你忘了這行'逗號'('/ zzz',{templateUrl:''controller:TestCtrl})',它應該是'when('/ zzz',{templateUrl:',controller: TestCtrl})' –

+0

這不是問題,我忘了在文本編輯器中修改樣例時添加。最初我只想離開控制器部分。 – Sharov

回答

0

您可能會在'/ users /:userid'路徑中看到兩個http請求,因爲$ http.get('users/1')和templateUrl 。

在路由配置中,您應該指定模板或templateUrl以及一個路由控制器。

再見

+0

因此,據我瞭解,總是有模板或templateUrl的請求,對吧?即使對於/ zzz路由,我只想顯示警報消息?這與我的第2個問題有關 - 爲什麼我不能只指定路由控制器? – Sharov

+0

不僅適用於templateUrl.I真的不知道您是否可以在沒有任何模板的情況下設置路線^^但是您可以在這種情況下使用指令。爲什麼你想爲路線設置多個控制器?總而言之,它聞起來像一個糟糕的設計。 – Whisher

+0

不,我只想在控制器上設置,沒有任何模板,所以我只能在客戶端的某些操作中處理某些路由。我不知道是否有可能,但似乎沒有指定模板(網址)它不會工作... – Sharov

1

您應該始終追蹤代碼,在語法上是正確的。你的情況,你是

  1. ng-app指令(提供錯誤的名稱第2行:它應該是ng-app="someoname"因爲你模塊的名字是"somename"
  2. 初始化你的應用程序不止一次: 你有一個ng-app在2號線(<html lang="en" ng-app="myModule">),另一種爲您body標籤(<body ng-app="myModule">

你可以處理這些問題的語法後跟蹤你的應用程序的邏輯流程。

+0

謝謝你的答覆!命名沒有問題,名稱相同。發佈前我剛剛更改並忘記了同步。命名沒有問題。 – Sharov