加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:16:19 所属栏目:百科 来源:网络整理
导读:我一直在努力将AngularJS基于 Railscast作为起点应用到我的Rails应用程序中.我的问题类似于这个问题: Angular JS ngResource with nested resources,但是我没有找到解决问题的方法. 目前我有一个嵌套资源,我通过部分显示在父资源的视图上.我需要在查询中提
我一直在努力将AngularJS基于 Railscast作为起点应用到我的Rails应用程序中.我的问题类似于这个问题: Angular JS ngResource with nested resources,但是我没有找到解决问题的方法.

目前我有一个嵌套资源,我通过部分显示在父资源的视图上.我需要在查询中提供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"})

我的问题是,如何在视图中设置“@project_id”,以便在我的示例的最后一行中可以在控制器中访问该值?我尝试使用ng-init:

<div ng-controller="TaskCtrl" ng-init="project_id = <%= @project.id %>">

但是,在我的TaskCtrl控制器中,’project_id’为空,而’$scope.project_id’也不起作用.任何帮助表示赞赏.

解决方法

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

<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()... 
}

抱歉没有咖啡……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读