我创建了一个指令,用于监视day
属性并在属性值更改时检索远程资源。咖啡脚本代码:
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
我不知道它是否相关,但我们正在使用 CORS 访问远程端(这似乎运作良好)。