我創建了一個指令,用於監視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
變化,但結果絕不回調觸發。網絡檢查表明請求沒有發送到遠端。我發現的唯一的解決方法是使用$timeout
服務推遲load
方法的執行:
$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訪問遠端(這似乎是不錯的選擇)。
是否有可能爲你把你的代碼plunkr或的jsfiddle。調試代碼更簡單的演示。 –
你的activityResource是什麼樣的? – DotDotDot
@RishabhSinghal我試圖創建一個jsFiddle,但還沒有設法重現這個問題。 – Jef