我正在尝试更改服务中的变量,但在发生这种情况时,控制器中的监视不会触发:
app.factory 'User', ->
class User
status: 'offline'
set_status: (status) ->
@status = status
app.service 'Account', ->
dsa: null
test: 'asd'
user: null
app.controller 'MainCtrl', ($scope, $timeout, Account, User) ->
Account.user = new User
$scope.$watch Account.user.status, (status) ->
console.log "status changed to #{status}"
$timeout ->
Account.user.set_status 'busy'
console.log Account.user.status
, 2000
这是plunk。是什么原因?
答案 0 :(得分:1)
$ watch没有任何问题。 $ watch表达式根据调用的范围进行计算,并将字符串表达式或函数作为其第一个参数。要使其正常工作,请在控制器内部发布Account
作为范围,并通过字符串$来监视它:
app.controller 'MainCtrl', ($scope, $timeout, Account, User) ->
$scope.name = 'World'
console.log Account
Account.user = new User
$scope.Account = Account
$scope.$watch 'Account.user.status', (status) ->
console.log "status changed to #{status}"
$timeout ->
Account.user.set_status 'busy'
console.log Account.user.status
, 2000
或者将监视表达式更改为返回Account.user.status属性的函数。我不熟悉咖啡脚本所以我会把这个例子留给你。