【发布时间】:2013-03-14 03:30:00
【问题描述】:
我在一个我无法看透的问题上被困了大约一天。
我在 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,它会显示适当的参数。但不在控制器中。更重要的是,我不能在控制器中调用 $route.current.params,因为 "current" 还没有定义。
【问题讨论】:
-
这与您的问题无关,但我认为您在使用
respond_with时不能使用to_json。您必须提供一个对象,您的控制器将根据请求的格式调用适当的响应者。 -
我认为您通常是对的,除非我需要获取像 @user.to_json(include: :videos) 这样的关联。我只是把它放在那里,直到我弄清楚为什么我没有得到适当的回应。
-
在 json 响应中包含关联的首选方法是在模型中覆盖
as_json。至于您的问题,您可以将浏览器设置为记录 xhr 请求(chrome 可以)并在此处准确发布来回的内容吗? -
啊,你是对的。我的错。我将浏览器设置为记录 xhr 请求,返回的对象是我所有用户的 JSON 数组。我将在上面发布一个示例(但不是实际的用户数据)。
-
我突然想到 - 是否允许我在 templateURL 中调用 JSON 对象?我读过的所有内容都显示部分 HTML 文件被调用...
标签: javascript angularjs