我在控制器中有以下内容,它旨在显示加载后的内容。理论上应该是非常简单但不打球,所以我试图理解我做错了什么。这是一个包含离子滑动盒的视图,这是我在加载数据之前试图隐藏的视图,以及用于拉动刷新的离子刷新器,因此$scope.broadcast('scroll.refreshComplete');
//initial controller vars:
$scope.data = {};
$scope.data.loading = true;
$scope.data.user = 1;
$scope.data.week = {};
$scope.data.getContent = function() {
var now = new Date().getTime();
serverRequestFactory.getWeek(now)
.success(function(response){
$scope.data.week = response;
$scope.data.loading = false;
$ionicSlideBoxDelegate.update();
$scope.$broadcast('scroll.refreshComplete');
})
.error(function(response){
$scope.data.loading = false;
$scope.$broadcast('scroll.refreshComplete');
})
}
if($scope.data.user == 1){
//calls above on view load
$scope.data.getContent();
//$scope.data.getContent();
}
如果我取消对$scope.data.getContent()
的第二次调用,但是我不知道原因,那么奇怪的是上述作品。我在设置$ scope.data.week对象和更新幻灯片委托之前和之后都试过$scope.apply()
。我的错误在哪里?
编辑:所以我刚刚在其中一个幻灯片框项目中添加了ng-repeat指令:
<ion-slide-box on-slide-changed="slideHasChanged($index)" ng-hide="data.loading">
<ion-slide class="customSlidePadding" ng-repeat="item in data.week.items">
现在整个幻灯片框都尊重初始的ng-hide值并且没有第二次函数调用就显示出来......肯定有一个 angular 的原因将指令添加到嵌套项目中隐藏的幻灯片盒可以使用吗?
答案 0 :(得分:0)
如果你在视图上使用$ scope.data.week,你应该初始化它,否则在第一次调用后,angular不会创建$ watch。
做吧。
$scope.data.week = []; //or whatever data you want...
你应该在调用异步请求之前执行此操作。
答案 1 :(得分:0)
除非您的模板实际上是通过事件处理程序调用您的函数
on-event="data.getContent()"
或通过一些约束机制(我不推荐)
<p>{{data.getContent()}}
然后你实际上并没有调用这种方法。我在提供的代码中看到的任何内容实际上都没有调用它,您只定义了在 if 块中调用自身的方法。
尝试明确地调用它:
$scope.data.getContent = function() {
var now = new Date().getTime();
serverRequestFactory.getWeek(now)
.success(function(response){
$scope.data.week = response;
$scope.data.loading = false;
$ionicSlideBoxDelegate.update();
$scope.$broadcast('scroll.refreshComplete');
})
.error(function(response){
$scope.data.loading = false;
$scope.$broadcast('scroll.refreshComplete');
})
}
if($scope.data.user == 1){
//calls above on view load
$scope.data.getContent();
//$scope.data.getContent();
}
}
//explicitly calling
$scope.data.getContent();