Pracuję nad implementacją AngularJS w mojej aplikacji Railsowej na podstawie Railscast jako punktu wyjścia. Moje pytanie jest podobne do tego pytania: Angular JS ngResource with nested resources, jednak nie znalazłem rozwiązania mojego problemu.Użyj AngularJS, aby pobrać zagnieżdżony zasób w Railsach
Obecnie mam zagnieżdżony zasób, który wyświetlam w widoku zasobu nadrzędnego, przez częściowe. Muszę dostarczyć PROJECT_ID w zapytaniu w celu pobrania zadania, więc mam:
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"})
Moje pytanie brzmi, jak mogę ustawić „@project_id” w widoku tak, że w ostatnim wierszu w moim przykład wartość jest dostępna w kontrolerze? Próbowałem za pomocą NG-Init:
<div ng-controller="TaskCtrl" ng-init="project_id = <%= @project.id %>">
Jednak raz w moim kontrolera TaskCtrl 'PROJECT_ID' jest puste, a '$ scope.project_id' nie działa. Każda pomoc jest doceniana.
Dzięki za odpowiedzi, Oliver. Pytanie: Jeśli dostęp do ng-init jest uzyskiwany przez ProjectID Controller, dlaczego nie mogę przenieść zakresu project_id do Task Controller? To prawda, że jestem nowy w angularjs, ale wydaje się, że jeśli wartości są zawarte w kontrolerze, powinny być dostępne z zakresu. – Drew
Oczywiście, możesz to zrobić, ale nadal musisz $ obserwować project_id, ponieważ nie ma on wartości na init kontrolera. Ale jeśli potrzebujesz project_id w innym kontrolerze, rodzeństwo dla TaskCtrl, to nie zobaczy project_id, tylko dzieci będą. Właśnie tam pojawiła się usługa. – Oliver
Dzięki za twoją pomoc, ale to nie działało dla mnie ... Użyłem klejnotu gon, aby przekazać wartość. Wygląda na to, że uzyskanie normalnych wartości pól z widoku powinno być nieco łatwiejsze w AngularJS. – Drew