Часы не вызывают при обновлении переменной службы

StackOverflow https://stackoverflow.com//questions/23000274

  •  20-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь изменить переменную в сервисе, но часы в контроллере не вызывают, когда это произойдет:

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
.

Вот a polekt для этого.В чем причина?

Это было полезно?

Решение

Нет ничего плохого в $ watch.Выражение Watch $ оценивается по отношению к объему, которое его вызывается и принимает строковое выражение или функцию в качестве первого аргумента.Чтобы получить его на работу, либо публикуйте Account внутри вашего контроллера, чтобы схватить и $ смотреть на него через строку:

Демо-пункер

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
.

или в качестве альтернативы изменения экспрессии часов к функции, которая возвращает свой свойство account.user.status.Я не знаком с кофем сценария, поэтому я оставлю пример до вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top