o relógio não disparar quando o serviço é variável atualizado
-
20-12-2019 - |
Pergunta
Eu estou tentando variável de mudança no serviço, mas cuidado com controlador não disparar quando isso acontece:
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
Aqui é um plunk para este.Qual é a razão?
Solução
Não há nada de errado com $assistir.O $assistir a expressão é avaliada de acordo com o escopo é chamado e faz uma expressão de seqüência de caracteres ou uma função como seu primeiro argumento.Para fazê-lo funcionar publicar Account
dentro de seu controlador para o escopo e $assistir nela através de seqüência de caracteres:
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, em alternativa, altere a expressão de inspeção para uma função que retorna a sua Conta.usuário.status de propriedade.Eu não estou familiarizado com café script, então eu vou deixar o exemplo para você.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow