AngularJs。路由。处理服务器请求。几个问题

时间:2013-08-16 18:00:29

标签: javascript angularjs browser

我有以下页面:

<!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)在路由配置中,为什么我必须指定模板或templateUrl?为什么我不能只为路由指定控制器?

2 个答案:

答案 0 :(得分:1)

您应该始终跟踪语法上正确的代码。在你的情况下,你是

  1. 为您的ng-app指令提供了错误的名称(在第2行:它应为ng-app="someoname",因为您的模块名称为"somename"
  2. 多次初始化您的应用程序:      您在第2行(ng-app)有一个<html lang="en" ng-app="myModule">而另一个body代表<body ng-app="myModule">
  3. 在处理这些语法问题后,您可以跟踪应用程序的逻辑流程。

答案 1 :(得分:0)

您可能会看到两个http请求,因为$ http.get('users / 1')和templateUrl 在'/ users /:userid'路线。

在路由配置中,您应指定template或templateUrl以及一个路由控制器。

再见