Frage

Ich versuche, die Variable im Dienst zu ändern, aber die Überwachung im Controller wird in diesem Fall nicht ausgelöst:

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

Hier ist ein zupfen dafür.Was ist der Grund?

War es hilfreich?

Lösung

An $watch ist nichts auszusetzen.Der $watch-Ausdruck wird anhand des Bereichs ausgewertet, in dem er aufgerufen wird, und verwendet als erstes Argument einen Zeichenfolgenausdruck oder eine Funktion.Damit es funktioniert, veröffentlichen Sie entweder Account in Ihrem Controller, um den Bereich festzulegen und ihn per String mit $watch zu überwachen:

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

Oder ändern Sie alternativ den Überwachungsausdruck in eine Funktion, die Ihre Account.user.status-Eigenschaft zurückgibt.Da ich mit Kaffeeskripten nicht vertraut bin, überlasse ich Ihnen das Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top