Как посмотреть 2 переменные в Angularjs, где 1 - путь к местоположению? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь запустить функцию при изменении пути к местоположению ИЛИ при изменении объекта через службу. Я не вижу, чтобы запустить функцию вообще.

    var settings = {
        value : service.cache.MY_VALUE,
        location: $location.path()
    }

    $scope.$watchCollection(function(){ return settings; }, function(newValue, oldValue){
        console.log('New value detected in settings');
    });

Почему консоль не запускается при переходе на новый URL-адрес или изменении кэшированного значения?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

При инициализации переменной литералом объекта любая функция внутри этого литерала вызывается только один раз:

ОШИБОЧНАЯ

var settings = {
    value : service.cache.MY_VALUE,
    location: $location.path()
}

Функция $location.path() должна вызываться при каждом цикле дайджеста:

function settingsFn() {
    return {
        value : service.cache.MY_VALUE,
        location: $location.path()
    }
}

$scope.$watchCollection( settingsFn, function(newValue, oldValue){
    console.log('New value detected in settings', newValue);
}); 

Помещая литерал объекта в функцию settingsFn, функция $location.path() вызывается каждый раз, когда вызывается функция settingsFn.

0 голосов
/ 09 мая 2019

Возможно, это глупый вопрос, но как вы меняете эти значения? Если вы ожидаете, что settings.value изменится при изменении кэша службы или settings.location при изменении пути, это вообще не повлияет на $ scope.settings.

В противном случае вам нужны глубокие часы. Используйте $ watch вместо $ watchCollection и добавьте true в качестве третьего аргумента. Смотрите весь объект (глубокие часы) с AngularJS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...