2014-03-19 5 views
3

У меня возникла проблема, когда я пытаюсь просмотреть определенный элемент из моей области после того, как решение выполнено. По какой-то причине он запускается, когда я запускаю вторую строку из этого фрагмента, и я, похоже, не могу добавить этот $ watch во время «разрешения».

Я понимаю, что обещания асинхронны, но как я могу узнать, когда мое решение сделано, чтобы добавить часы?

variableToWatch может быть изменено либо с помощью кода или в пользовательском интерфейсе (в противном случае я бы просто использовал нг-изменение = "DoWork()")

$scope.variableToWatch = $route.current.locals.data.initialValue; 
    $scope.listOfDependantData = $route.current.locals.data.items; 

    $scope.$watch('variableToWatch', function (newValue) { 
     myService.getNewDependantData(newValue).$promise.then(
      function (items) { 
       $scope.listOfDependantData = items; 
      } 
     ); 
    }; 

ответ

1

Update:

Если вы хотите запустить свой код только тогда, когда он изменит после первоначальной установки значения, вы можете использовать вторую форму watchFunc, переданную как второй аргумент в $scope.$watch:

$scope.$watch('variableToWatch', function (newValue, oldValue) { 
    if (typeof newValue !== 'undefined' && newValue !== oldValue) { 
     // Use the new value here ... 
    } 
}); 

Я не в полной мере следовать вопрос, но я подозреваю, что вы хотите посмотреть значение $route.current.locals.data.initialValue вместо $scope.varibleToWatch?

В этом случае, вы можете использовать альтернативную форму $scope.$watch с function в качестве первого аргумента:

$scope.$watch(function() { return $route.current.local.data.intialValue; }, function (newValue) { 
    // ... 
}; 

Или, если вы хотите посмотреть переменную на вашем $scope, который ссылается на укусами содержащийся в $route.current.local.data.initialValue, то вы можете использовать это:

$scope.$watch(function() { return $scope[$route.current.local.data.intialValue]; }, function (newValue) { 
    // ... 
}; 

это решает ли проблема?

+0

Я хочу посмотреть $ scope.variableToWatch, но моя проблема в том, что он работает дважды в первый раз. Я не хочу, чтобы он запускался изначально (когда я установил значение в первый раз). И это начальное значение происходит от асинхронного вызова. Одна вещь, которая может мне помочь, - это возможность получить обещание, возвращенное «решением» маршрута. – LostBalloon

+0

@LostBalloon Обновлен ответ. Это делает то, что вы хотите? Кроме того, я боюсь, что я вообще не знаю, как установить обещание в контроллере. Вы можете использовать побочные эффекты решения обещаний в своем главном приложении для совместного использования значения через службу с вашим контроллером, но я не уверен, как это играет с текущей структурой вашего приложения. –

Смежные вопросы