【发布时间】:2014-03-12 13:14:18
【问题描述】:
我正在尝试找到一种方法来最小化 jsonp 请求,因为 Angular 不会缓存这些请求。我的方法是将每个控制器中的空数组设置为一个主控制器,当它连接到主体时加载一次。之后,我将检查数组是否为空,如果是则使用服务并返回 json。 我现在的问题是,由于某种原因,我不明白在服务调用之外检查时数组是空的。
示例代码
angular.module('Feed.controllers', [])
.controller('MainCtrl', function($scope)
{
function getYear()
{
var currentDate = new Date();
return currentDate.getFullYear();
}
$scope.currentYear = getYear();
$scope.StandingsList = [];
})
.controller('StandingsCtrl', function($scope, APIservice, $routeParams)
{
console.log($scope.StandingsList.length); // returns 0
if ($scope.StandingsList.length === 0)
{
APIservice.getSomtehing().success(function (response)
{
$scope.StandingsList = response.jsonData;
console.log($scope.StandingsList.length); // returns total entries
});
};
console.log($scope.StandingsList.length); // returns 0
})
MainCtrl 在 body 标记中,因为我在 HTML 中的各个位置使用 currentYear 使用路线和部分来调用 StandingsCtrl 以进行演示。带有 ng-view 的 div 在 MainCtrl 的 body 元素内
【问题讨论】:
-
不要在控制器中进行本地缓存,在服务中这样做....数组为空的原因是因为每个控制器都实例化了新的
$scope,所以你不是指向同一个变量 -
hmm 如果我没有指向同一个变量,那么为什么如果我从 MainCtrl 中删除该变量我会得到错误:$scope.StandingsList is undefined,这是正确的。
-
我不确定你所说的“删除”变量是什么意思,但是两个控制器不共享任何
scope变量,只有当它们是rootScope变量时,两个控制器都会继承它们,因为所有scopes都是rootScope的后代 -
我的意思是如果我删除 $scope.StandingsList = [];在 MainCtrl 中,然后我得到未定义的错误,这意味着 StandingsCtrl 使用 MainCtrl 中的 StandingsList。我错了吗?
-
你能创造一个小提琴吗?当我只看到定义而不看到 html 中的用法时,很难判断发生了什么
标签: javascript jquery arrays json angularjs