你好,
在角度视图内容为渲染器之前,我遇到了使用范围变量(在路由器中使用resolve)进行操作的问题。我正在使用AngularJS 1.2.16
我有看法,DIV的显示位置取决于范围变量。
<div ng-hide="data.show">Text to show</div>
我有一个范围变量$scope.arived
的控制器并且我正在观察这个变量,所以当它改变时,监视回调中的函数toggleText()
会将$scope.data.show
设置为true / false。
app.controller('view1Controller', function($scope, arived) {
$scope.arived = arived; // About this im talking about in next paragraph
$scope.$watch('arived', toggleText);
function toggleText(newVal, oldVal) {
$scope.data.show = !$scope.data.show;
}
});
这通常是例外。问题来了,当我将使用路由器的数据注入解决方法。
让我说我有这个路由器:
$routerProvider
.when('/view1', {
controller: "view1Controller",
templateUrl: "/templates/partial1.html",
resolve: {
arived: function(dataService) {
return dataService.check();
}
}
});
dataService.check()
正在返回承诺,我希望在承诺解决后填写控制器$scope.arived
中的view1Controller
。
这也正在运作,但为时已晚。 $scope.arived
已填充,但在渲染Angularjs视图之前,文本不可见。
当我尝试将此setter包装在控制器中时:
$scope.arived = arived;
进入$timeout
,fe。延迟1秒
$timeout(function() {
$scope.arived = arived;
}, 1000);
它的工作..但我不想要任何不需要的延迟。
是否有任何事件,如视图渲染或其他什么,我可以在哪里解雇我的二传手? 或者我干脆做错了? :)
谢谢
答案 0 :(得分:0)
我认为您应该使用已解决的承诺
中的值初始化data.showapp.controller('view1Controller', function($scope, arived) {
$scope.arived = arived; // About this im talking about in next paragraph
$scope.data.show= arived;
$scope.$watch('arived', toggleText);
function toggleText(newVal, oldVal) {
$scope.data.show = !$scope.data.show;
}
});