我有一个控制器,我用于收集数据的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")
的按钮时,它使用相同的控制器,那么范围是空的。
如何使用同一个控制器在多个视图之间传输观察范围?
答案 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;
});