首页 > 解决方案 > 如何在 Angularjs 中观察 2 个变量,其中 1 是位置路径?

问题描述

当位置路径更改或通过服务更改对象时,我正在尝试运行一个函数。我根本看不到触发该功能。

    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 或更改缓存值时控制台没有被触发?

标签: angularjs

解决方案


当使用对象字面量初始化变量时,该字面量内的任何函数都只会被调用一次:

错误

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函数时都会调用该函数。


推荐阅读