Die Überwachung wird nicht ausgelöst, wenn die Servicevariable aktualisiert wird
-
20-12-2019 - |
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?
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:
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