Javascript 路由更改后,监视范围为空

Javascript 路由更改后,监视范围为空,javascript,angularjs,Javascript,Angularjs,我有一个控制器,用于收集数据的3个不同视图。我在里面看两个示波器。 这是一段摘录: // 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 ()

我有一个控制器,用于收集数据的3个不同视图。我在里面看两个示波器。 这是一段摘录:

  // 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
中都充满了谷歌地图api的数据

但是,当我单击一个按钮来更改使用同一控制器的路由
(ui sref=“view2”)
,范围是空的


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

然后启用
$rootScope
可能会起作用

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

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

如下所示:
ui sref=“view2({poll:poll})”

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

$stateProvider.state("homepageState", {
    url: "/home/",
    templateUrl: "templates/homePage.html",
    controller: "HomePageController",
    params: {
       poll: null //initial
    }
});
在控制器中,您可以通过调用
$stateParams.poll

你也可以利用角度。服务只实例化一次,并且是可重用的

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

何时(值,[successCallback],[errorCallback],[progressCallback])

包装可能是值或(第三方)的对象,然后可以 承诺变成$q承诺。这在处理问题时非常有用 对象,该对象可能是承诺,也可能不是承诺,或者如果承诺实现了 来自不可信任的来源


我认为rootScope不是处理这个问题的合适方法如果他改变了路径,那么当前的作用域都会丢失,然后将数据放入rootScope将保留数据,无论他在哪个控制器中。但要工作,您必须将所有的
poll
对象放入
$rootScope
中,否则您将出现错误您正在rootScope中创建一个不必要的手表,而该手表永远不会被清除。rootScope用于全局功能$如果某个值已被修改,并且可能导致性能问题,则watch是一个脏检查。如果您已经尝试了正确的方法,那么这将是最后一个选项。好的,参数定义应该是什么样子的?我已经将它添加到了我的答案中