2013-08-16 48 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