前端: AngularJS 1.1.5
,ngResource
返回承诺的$then
功能
后端: Rails 3.2
问题:每当我从AngJS控制器中的函数内部调用Card.update
操作时,我都无法尝试同时记录success
和{{ 1}}回复。从函数外部调用error
操作时,Card
$资源的行为符合预期。
Rails关联
Card.update
Rails路线
Deck has_and_belongs_to_many :cards
Card has_and_belongs_to_many :decks
Rails卡控制器'更新'操作
resources :cards do
get '/decks' => 'cards#decks', on: :member
end
卡片资源工厂
def update
@card = Card.where( id: params[:id] ).first
unless params[:deck_id].nil?
@deck = Deck.where( id: params[:deck_id] ).first
@deck.cards << @card
end
render json: Card.update( params[:id], params[:card] )
end
卡更新功能(在AngJS控制器内):(成功/错误消息未记录到控制台)。
app.factory "Card", ($resource) ->
$resource "/cards/:id",
id: "@id"
,
index:
method: "GET"
isArray: true
show:
method: "GET"
isArray: false
create:
method: "POST"
update:
method: "PUT"
destroy:
method: "DELETE"
decks:
method: "GET"
isArray: true
url: 'cards/:id/decks'
答案 0 :(得分:0)
我解决了自己的问题。我使用Misko Hevery的Github comment作为参考。
显然,在Angular 1.1.x
中,如果您离开角度执行上下文,您将不在Angular的$scope.$apply
函数中。就我而言,我正在使用JQuery UI的sortable
函数 - 每当Card
被放入新的Deck
时,我想更新Deck's
卡以反映该更新。
据我所知,由于这个原因,我在角度执行上下文之外。 ngResource
不会执行PUT
语句,并且永远不会调用Angular的$then
对象的promise
函数。
只需将$scope.$apply
函数包裹在Card.update
操作周围,就可以执行操作,从而允许$then
函数执行。请参阅下面的代码示例以进一步说明:
$scope.$apply ->
Card.update(
id: 1
deck_id: 2
front: "HELLO WORLD!"
).$then ((success) ->
console.log "Success"
console.log success
), (error) ->
console.log "Error"
console.log error