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?

È stato utile?

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:

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