8

透けて見えない問題で1日ほど立ち往生しています。

users.js.coffeeファイルに次のコードがあります。

app = angular.module("app", ["ngResource"])
app.config ['$routeProvider', '$locationProvider', ($routeProvider, $locationProvider) ->
  $locationProvider.html5Mode(true)
  $routeProvider.when('/users/:id', {templateUrl: '/users/:id.json', controller: UserCtrl})
  $routeProvider.when('/users/:id/videos', {templateUrl: '/users/:id/videos.json', controller: UserCtrl})
]

app.factory "User", ["$resource", ($resource) ->
  $resource("/users/:id", {id: "@id"}, {
    show: {method: "GET"}, 
    videos: {method: "GET", isArray:true}
    })
]

@UserCtrl = ["$scope", "$location", "$route", "http", "$routeParams", "User", ($scope, $location, $route, $http, $routeParams, User) ->
  console.log($location)//LocationUrl {$$parse: function, $$compose: function, $$rewriteAppUrl: function, $$protocol: "http", $$host: "localhost"…}

  console.log($route)//Object {routes: Object, reload: function}
  console.log($routeParams)//Object {} 

]

$ routeParamsが空のオブジェクトになるのはなぜですか?ビューで$route.current.paramsを呼び出すと、適切なパラメーターが表示されます。しかし、コントローラーにはありません。さらに、「current」がまだ定義されていないため、コントローラーで$route.current.paramsを呼び出すことができません。

4

4 に答える 4

1

コントローラーの初期化時に、$routeProvider / ng-view 経由でルーティングされたコントローラー以外のコントローラーに対して $routeParams を使用できないようです。(少なくともAngular 1.0.8では)

これらの外部コントローラーのルートパラメーターにアクセスする場合は、使用できます$location.search().<param_name>

于 2014-05-28T01:02:39.617 に答える
0

あなたのルートはあなたのAPIルートを指しています。代わりにレンダリングするテンプレートへのパスである必要があります。

@App = angular.module('app',['ngResource'])
  .config(['$routeProvider'], ($routeProvider) ->
    $routeProvider
      .when('/users',
        templateUrl: 'users/index.html',
        controller: 'UsersIndexCtrl')
      .when('/users/:id',
        templateUrl: 'users/show.html',
        controller: 'UsersShowCtrl')
      .otherwise(
        redirectTo: '/users'
    )])

次に、ユーザー インデックス コントローラーはおそらく次のようになります。

App.controller 'UsersIndexCtrl',['$scope','$location','User', ($scope, $location, User) ->

  $scope.users = User.query()

  $scope.onClickHandlerToRoute = (user)->
    $location.path "path/to/show/user/#{user.id}"

すでに ngResource REST 抽象化を使用しているため、$http を注入する必要はありません。

于 2013-06-03T02:56:27.853 に答える