Dre*_*rew 5 ruby-on-rails angularjs
我一直在基于Railscast作为起点,将AngularJS实现到我的Rails应用程序中.我的问题类似于这个问题:使用嵌套资源的Angular JS ngResource,但是我没有找到解决问题的方法.
目前我有一个嵌套资源,我通过部分显示在父资源的视图上.我需要在查询中提供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"})
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在视图中设置"@project_id",以便在我的示例的最后一行中可以在控制器中访问该值?我尝试使用ng-init:
<div ng-controller="TaskCtrl" ng-init="project_id = <%= @project.id %>">
Run Code Online (Sandbox Code Playgroud)
但是,在我的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()...
}
Run Code Online (Sandbox Code Playgroud)
抱歉没有咖啡......
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |