Watch ne déclenche pas lorsque la variable de service mise à jour
-
20-12-2019 - |
Question
J'essaie de changer la variable en service, mais la veille dans le contrôleur ne déclenche pas lorsque cela se produit:
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
Voici un Plunk pour cela.Quelle est la raison?
La solution
Il n'y a rien de mal avec $ Watch.L'expression $ Watch est évaluée par rapport à la portée et prend une expression de chaîne ou une fonction comme premier argument.Pour le faire fonctionner soit publier Account
à l'intérieur de votre contrôleur à la portée et à Wark sur elle via String:
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
ou modifier également l'expression de la montre à une fonction qui renvoie votre compte.user.status.Je ne connais pas le script de café, je ne laisserai donc pas l'exemple à vous.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow