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?

¿Fue útil?

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:

Demo Plunker

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
scroll top