离子,将范围变量传递给弹出范围

时间:2015-11-28 12:12:41

标签: angularjs ionic

我想从视图范围传递一个变量($ scope.sort ) into the popover scope. Once set in the popover, the variable 'goes out' of it with no issue though, with code below in $ scope.closeSortPopover`。

我认为popover范围与它来自的控制器范围相同。 但似乎并非如此。 popover范围在哪里? 如果我从here正确理解,则popover范围是控制器范围的子节点。那么如何才能访问它??

仅供参考我的popover是<ion-radio>的列表,在我的主视图中为大列表提供了不同的排序选项。

HTML:

<button ng-click="openSortPopover($event, sort)">

controllers.js

$ionicPopover.fromTemplateUrl('templates/computeSortPopover.html', {
   scope: $scope
}).then(function(popover) {
   $scope.sortPopover = popover;
});
$scope.openSortPopover = function($event, sort) {
   $scope.sortPopover.show($event);
};
$scope.closeSortPopover = function(sort) {
   $scope.sortPopover.hide();
   $scope.sort = sort;
};

2 个答案:

答案 0 :(得分:0)

在控制器js中,您将控制器的范围分配给弹出框的范围。因此,可以通过弹出视图访问控制器范围中的所有方法。换句话说,控制器视图和弹出窗口视图共享相同的范围。

事实上,您可能会认为这违反了mvc,因为一个控制器不能拥有两个视图,但是对于角度,您实际上可以不这样做。

要创建隔离范围,您唯一的选择是指令。

答案 1 :(得分:0)

我发现由于javascript继承,scope变量必须包含在要传递给继承范围的对象中。

所以不要这样:

$scope.sort = ....

我在我的控制器中声明了这一点:

$scope.data={};
$scope.data.sort = ....

并在我的html中使用(在初始视图和弹出模板中):

data.sort

显然在这里记录:https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance