L'orologio non si innesca quando l'aggiornamento della variabile di servizio
-
20-12-2019 - |
Domanda
Sto cercando di cambiare variabile in servizio, ma guardare nel controller non si attiva quando ciò accade:
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
.
Ecco un plunk per questo.Qual è la ragione?
Soluzione
Non c'è niente di sbagliato con $ orologio.L'espressione di $ orologio viene valutata contro l'ambito che è chiamato e prende un'espressione di stringa o una funzione come primo argomento.Per farlo funzionare pubblicare Account
all'interno del tuo controller all'ambito e $ Guarda su di esso tramite 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
.
o alternativamente modificare l'espressione dell'orologio in una funzione che restituisce il tuo account.User.Status Property.Non ho familiarità con la scrittura del caffè, quindi lascerò l'esempio a te.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow