質問編集履歴

3

タイトルを修正しました。

2015/10/27 11:50

投稿

aoshima.natsuki
aoshima.natsuki

スコア33

test CHANGED
@@ -1 +1 @@
1
- controllerからserviceに動的に値を渡す方法について
1
+ AngularJSでcontrollerからserviceに動的に値を渡す方法について
test CHANGED
File without changes

2

書式を改善させました。

2015/10/27 11:50

投稿

aoshima.natsuki
aoshima.natsuki

スコア33

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  《service》
28
28
 
29
- ```ここに言語を入力
29
+ ```javascript
30
30
 
31
31
  angular.module('myApp').factory 'Item', ($resource) ->
32
32
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  《controller》
44
44
 
45
- ```ここに言語を入力
45
+ ```javascript
46
46
 
47
47
  angular.module('myApp').controller "shopEdit", ($scope, Shop, Item) ->
48
48
 

1

分かりづかったので書き直しました。

2015/10/27 11:49

投稿

aoshima.natsuki
aoshima.natsuki

スコア33

test CHANGED
@@ -1 +1 @@
1
- ngResourceでネストされたアイテムのsaveができず困っいます
1
+ controllerからserviceに動的に値を渡す方法につい
test CHANGED
@@ -1,78 +1,32 @@
1
- 1つ Shop のなか複数の Shelf がありその中に Item 格納されているケースを想定しています。
1
+ 複数のShopにShelfItemがそれぞれネストされて繋がっている以下のようなモデル構成のとき、
2
2
 
3
- ngResourceを使ってjsonでレンダリングされた "/api/shops/:shop_id/shelfs/:shelf_id/items/:id" を呼び出して、データベースに item を追加しようとしいます。
3
+ ngResourceを使ってデータベースにitemを追加(save)する方法についす。
4
4
 
5
5
 
6
6
 
7
- 《controller》shop_edit.coffee
7
+ Shop
8
8
 
9
- ```javascript
9
+ └ Shelf
10
10
 
11
- angular.module("myApp").controller "shopEdit", ($scope, Shop, Shelf, Item) ->
11
+ Item
12
12
 
13
13
 
14
14
 
15
- $scope.init = ->
16
-
17
- # Rails側でパラメータを取得してng-initからshop_idを設定
18
-
19
- shop_id = $scope.shop_id
20
-
21
- # Shopを取得
22
-
23
- Article.get(id: shop_id).$promise.then (shop) ->
15
+ Rails側では、レンダリングされたjson "/api/shops/:shop_id/shelfs/:shelf_id/items/:id" を呼び出すAPIに専念させ、Angular側から、serviceクラスのfactoryメソッドでそれを呼んでいます。
24
-
25
- $scope.shop = shop
26
-
27
- return
28
16
 
29
17
 
30
18
 
31
- $scope.saveItem = (shop, shelf) ->
19
+ このとき、追加するitemに紐づく動的なshop_idとshelf_idの渡し方がわかりません...
32
20
 
33
- # 保存
21
+ 「$scope.newItem = { ... }」の中で指定しているのですがどうやら渡せないみたいで困ってます。
34
22
 
35
- $scope.newItem = { name: shelf.item.name, shop_id: shop.id, shelf_id: shelf.id }
23
+ なぜかわかる方、おられましたら教えていただいたいです。初歩的な質問ですみませんがよろしくお願いいたします。
36
-
37
- Item.save($scope.newItem)
38
-
39
- $scope.newItem = newItem
40
-
41
- return
42
-
43
- ```
44
24
 
45
25
 
46
26
 
47
- 《viewedit.html.slim
27
+ service》
48
28
 
49
- ```html
50
-
51
- (一部抜粋)
52
-
53
- .item
54
-
55
- input name="name" ng-model="shelf.item.name" ng-blur="saveItem(shop, shelf)"
56
-
57
- ```
58
-
59
-
60
-
61
- 《service》shop.coffee
62
-
63
- ```javascript
29
+ ```ここに言語を入力
64
-
65
- angular.module('myApp').factory 'Shop', ($resource) ->
66
-
67
- $resource('/api/shops/:id', { id: @id }, { update: { method: 'PUT' }})
68
-
69
- ```
70
-
71
-
72
-
73
- 《service》item.coffee
74
-
75
- ```javascript
76
30
 
77
31
  angular.module('myApp').factory 'Item', ($resource) ->
78
32
 
@@ -86,28 +40,22 @@
86
40
 
87
41
  ```
88
42
 
43
+ 《controller》
89
44
 
45
+ ```ここに言語を入力
90
46
 
91
- このとき、動的な値 shop_id shelf_id をcontorollerから受け取れずに困っています。
47
+ angular.module('myApp').controller "shopEdit", ($scope, Shop, Item) ->
92
48
 
93
- $scope.newItem = { ... } の中で shop_id と item_id を指定し、Item.save($scope.newItem) で service 側に渡しているのですが正しく受け取れないようで困ってます(:shop_id, :shelf_id が空欄になり保存に失敗しています)。
49
+ $scope.addItem = (shop, shelf) ->
94
50
 
51
+ # 保存
95
52
 
53
+ $scope.newItem = { body: shelf.item.body, shop_id: shop.id, shelf_id: shelf.id }
96
54
 
97
- また、なぜか、以下のように :shelf_id を :shop_id に置き換えないと正しく保存されません...
55
+ Item.save($scope.newItem)
98
56
 
57
+ $scope.newItem = newItem
99
58
 
100
-
101
- ```javascript
59
+ return
102
-
103
- $resource('/api/shops/:shop_id/shelfs/:shop_id/items/:id',
104
-
105
- { shop_id: '13495' },
106
-
107
- { update: { method: 'PUT' }})
108
60
 
109
61
  ```
110
-
111
-
112
-
113
- 原因が検討もつかず困っています... どうかよろしくお願いいたします。