如何仅在定义/解析相应值时设置 $scope.property



在我的控制器中,我有这段代码:

$scope.property = localStorageService.get('property');

澄清一下,localStorageService是一个角度模块,它有助于处理设置和获取本地存储变量。

问题是localStorageService.get('property')由于工厂类处理异步$http调用,仅在一段时间后才会设置。在我做作业的时候,localStorageService.get('property')是未定义的,但最终将由xhr调用解决。

App.factory('fact', ['$http', 'localStorageService', function($http, localStorageService){
    return {
        fetchProperty: function() {
            $http.get('/property')
                .success(function(data, status, headers, config){
                    localStorageService.set('property', data);
                })
        }
    }
}]);

如何设置$scope.property何时且仅当已设置localStorageService.get('property')时?

编辑

我正在使用浏览器的本地存储,因为检索到的属性旨在在整个应用程序中持续存在,直到用户注销,在这种情况下,它会从浏览器中删除。

如注释中的建议,返回承诺。您甚至可以像这样链接then调用

return $http.get('/property').then(function(data) {
    localStorageService.set('property', data);
    return data;
});

然后,在您的控制器中...

fact.fetchProperty().then(function(property) {
    $scope.property = property;
});

您是否尝试过使用本地存储服务的绑定功能。

类似的东西

App.factory('fact', ['$scope', '$http', 'localStorageService', function($scope, $http, localStorageService){ return { fetchProperty: function() { $http.get('/property') .success(function(data, status, headers, config){ localStorageService.set('property', data); localStorageService.bind($scope, 'property'); }) } } }]);

然后,无需在控制器中设置值。

相关内容

最新更新