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()... } 抱歉没有咖啡…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |