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?

Était-ce utile?

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:

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

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