路由器中的解析不及时更新范围

时间:2014-04-24 10:03:07

标签: javascript angularjs angularjs-scope promise angularjs-routing

你好,

在角度视图内容为渲染器之前,我遇到了使用范围变量(在路由器中使用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);

它的工作..但我不想要任何不需要的延迟。

是否有任何事件,如视图渲染或其他什么,我可以在哪里解雇我的二传手? 或者我干脆做错了? :)

谢谢

1 个答案:

答案 0 :(得分:0)

我认为您应该使用已解决的承诺

中的值初始化data.show
app.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;
  }

});