El reloj no se desencadena cuando se actualiza la variable de servicio
-
20-12-2019 - |
Pregunta
Estoy tratando de cambiar la variable en el servicio, pero el reloj en el controlador no se desencadena cuando eso sucede:
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
Aquí hay una PLUNK para esto.¿Cuál es la razón?
Solución
No hay nada de malo en $ Watch.La expresión de $ Watch se evalúa contra el alcance que se llama y toma una expresión de cadena o una función como su primer argumento.Para que funcione, haga públicos Account
dentro de su controlador para alcantarlo y $ WATRO en él a través de 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, cambie la expresión del reloj a una función que devuelva su cuenta .User.Status.No estoy familiarizado con el guión de café, así que dejo el ejemplo hasta usted.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow