1

私は次のページを持っています:

<!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)次のURLに移動すると、http://localhost:7000/service/1#/test1 常に2つのリクエストがサーバー(私の場合はRESTサービス)に送信されhttp://localhost:7000/service/1ますhttp://localhost:7000/archivarius/users/1. おそらくAngularJsコントローラを使用して、最初の(役に立たない)ブラウザリクエストをどうにかして処理できますか? ユーザーがURLを入力するhttp://localhost:7000/service/1#/test1と、test2コントローラーで唯一のこと(リクエスト)が発生するはずです。出来ますか?

2) ルーティング構成で、テンプレートまたは templateUrl を指定する必要があるのはなぜですか? ルートにコントローラーだけを指定できないのはなぜですか?

4

2 に答える 2

1

構文的に正しいコードを常にトレースする必要があります。あなたの場合、あなたは

  1. ng-appディレクティブに間違った名前を指定します(2行目:ng-app="someoname"モジュールの名前が"somename"
  2. アプリケーションを複数回初期化する: ng-app2 行目 ( ) とあなたタグ ( )<html lang="en" ng-app="myModule">に別の行があります。body<body ng-app="myModule">

これらの構文上の問題に対処した後、アプリの論理フローをたどることができます。

于 2013-08-16T20:29:09.097 に答える
0

$http.get('users/1') と '/users/:userid' ルートの templateUrl のため、2 つの http リクエストが表示される場合があります。

ルーティング構成では、テンプレートまたは templateUrl とルート用のコントローラーを 1 つ指定する必要があります。

さよなら

于 2013-08-16T19:07:47.463 に答える