day
属性を監視し、属性値が変更されるたびにリモート リソースを取得するディレクティブを作成しました。CoffeeScript コード:
angular.module('app.directives').directive 'myDirective', ['$timeout', ($timeout)->
DirectiveController=($scope, activityResource)->
# Load activities
load= ()->
activityResource.get {
day: $scope.day
environment_id: $scope.environment.id
},
(data)->
$scope.activities = data.activities
# Watch environment and reload activities
$scope.$watch 'environment', (value) ->
load()
# Watch selected day to reload activities
$scope.$watch 'day', (value) ->
load()
...
]
load
メソッドは変更のたびに呼び出されますday
が、結果のコールバックはトリガーされません。ネットワーク検査は、要求がリモート エンドに送信されていないことを示しています。load
私が見つけた唯一の回避策は、サービスを使用してメソッドの実行を延期することです$timeout
:
$scope.$watch 'day', (value) ->
$timeout (()-> load()), 10
スコープのライフサイクルに関連する問題が疑われますが、リソースの呼び出しを延期しなければならない理由がわかりませんでした。
更新:
リソースのソース コード:
resources = angular.module('app.resources', ['ngResource'])
...
resources.factory 'app.activityResource', ['$resource', 'app.endpoint', ($resource, endpoint)->
$resource "#{endpoint()}/user/environments/:environment_id/activities/:id/:verb",
{environment_id: "@environment_id", id: "@id"},
latest:
method : 'GET'
params:
verb: 'latest'
annual:
method : 'GET'
params:
verb: 'annual'
]
environment
また、リソースを照会するためのパラメーターとして使用される2 番目の監視属性 ( ) をコードの抜粋に追加しました。
更新 2
関連しているかどうかはわかりませんが、CORS を使用してリモート エンドにアクセスしています (これはうまく機能しているようです)。