Javascript 路由更改后,监视范围为空
我有一个控制器,用于收集数据的3个不同视图。我在里面看两个示波器。 这是一段摘录: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 ()
// 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是一个脏检查。如果您已经尝试了正确的方法,那么这将是最后一个选项。好的,参数定义应该是什么样子的?我已经将它添加到了我的答案中