路线变化后,观察范围为空

时间:2016-01-27 18:59:44

标签: javascript angularjs

我有一个控制器,我用于收集数据的3个不同视图。我正在观看2个范围。 这是一段摘录:

  // predefine place before Google Maps API GET
  $scope.place = {
    formatted_address: '',
    url: ''
  };

  // watch place in case of change (doesn't work otherwise)
  $scope.$watch('place', function () {
    $scope.poll.Poll.Location    = $scope.place.formatted_address;
    $scope.poll.Poll.UrlLocation = $scope.place.url;
  });

在视图1上一切正常,$scope.poll.Poll.Location$scope.poll.Poll.Location充满了Google Maps api的数据。

但是当我点击一个改变我的路线(ui-sref="view2")的按钮时,它使用相同的控制器,那么范围是空的。

如何使用同一个控制器在多个视图之间传输观察范围?

2 个答案:

答案 0 :(得分:2)

如果您有多个状态使用相同的控制器,则两个状态都会获得它自己的控制器实例。您必须将数据作为参数传递给第二个状态。

像这样:ui-sref="view2({poll: poll})"

不要忘记将参数添加到$ stateProvider中的状态定义。

$stateProvider.state("homepageState", {
    url: "/home/",
    templateUrl: "templates/homePage.html",
    controller: "HomePageController",
    params: {
       poll: null //initial
    }
});

在您的控制器中,您可以致电$stateParams.poll

获取价值

您还可以使用角度services。服务只实例化一次并且可以重复使用。

如果您必须等待来自未知来源的数据,那么您必须查看Promise.when()

  

when(value,[successCallback],[errorCallback],[progressCallback]);

     

包装可能是值的对象或(第三方)然后能够   承诺兑换$ q承诺。当你处理一个时,这很有用   可能会或可能不是承诺的对象,或承诺来的对象   来自无法信任的来源。

答案 1 :(得分:-1)

然后点击$rootScope可能有效

$scope.$watch('place', function () {
  $rootScope.poll.Poll.Location    = $scope.place.formatted_address;
  $rootScope.poll.Poll.UrlLocation = $scope.place.url;
});