gpt4 book ai didi

ruby-on-rails - 在 Rails 中使用 AngularJS 检索嵌套资源

转载 作者:行者123 更新时间:2023-12-03 16:03:46 24 4
gpt4 key购买 nike

我一直致力于根据 Railscast 在我的 Rails 应用程序中实现 AngularJS。作为起点。我的问题类似于这个问题:Angular JS ngResource with nested resources ,但是我还没有找到解决我的问题的方法。

目前我有一个嵌套资源,我通过部分显示在父资源的 View 上。我需要在查询中提供 project_id 以检索任务,所以我有:

app.factory "Task", ["$resource", ($resource) ->
$resource("/projects/:project_id/tasks/:id", {project_id: "@project_id", id: "@id"}, {update: {method: "PUT"}})
]

@TaskCtrl = ["$scope", "Task", ($scope, Task) ->
$scope.tasks = Task.query({project_id: "@project_id", id: "@id"})

我的问题是,如何在 View 中设置 '@project_id' 以便在我的示例的最后一行中可以在 Controller 中访问该值?我尝试使用 ng-init:
<div ng-controller="TaskCtrl" ng-init="project_id = <%= @project.id %>">

但是,一旦在我的 TaskCtrl Controller 中,'project_id' 是空白的,并且 '$scope.project_id' 也不起作用。任何帮助表示赞赏。

最佳答案

ng-init 在模板执行之前运行,而不是在 Controller 初始化之前运行。
如果只有模板知道 project_id,则创建一个共享服务(它可以是一个简单的值工厂),它保存项目 id 并将其注入(inject)您的 Controller 。
您可以从 TaskController 之前初始化的另一个 Controller 填充该服务

<div ng-controller="ProjectIDController">
<span ng-init="project_id = <%= @project.id %>"></span>
</div>

<div ng-controller="TaskCtrl">
...
</div>

function ProjectIDController( $scope, sharedService ) {
$scope.$watch('project_id', function (UID) {
sharedService.setProjectID($scope.project_id);
});
}

function TaskCtrl ($scope, Task, sharedService) {
$scope.tasks = Task.query({project_id: sharedService.getProjectId()...
}

抱歉没有咖啡...

关于ruby-on-rails - 在 Rails 中使用 AngularJS 检索嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16939799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com