Ionic v1 全局 $ionicPopover 菜单
Ionic v1 global $ionicPopover menu
对于我的 ionic v1 应用程序,我需要在右上角添加一个 header 菜单(如 bootstrap 菜单)。当我单击此按钮时,我需要显示具有相同 ng-click 事件的菜单。对于图形要求,我需要一个菜单,没有侧边菜单。
发现 $ionicPopover,我认为这是我的解决方案。
我的问题是关于菜单功能。我的想法是为所有菜单使用 html 模板,并为我的所有应用程序将弹出功能放在可访问的同一位置。有可能吗?
仅找到我需要为每个控制器实现弹出功能的示例。
例如,这是一个简单的控制器。我需要为我的所有项目全局定义 popover 函数。弹出窗口定义相同。有可能吗?谢谢
.controller('DashCtrl', function($scope, $ionicLoading, $ionicPopover) {
// .fromTemplate() method
var template = '<ion-popover-view>' + '<ion-header-bar>' +
'<h1 class = "title">Popover Title</h1>' +
'</ion-header-bar>'+ '<ion-content>' +
'Popover Content!' + '</ion-content>' + '</ion-popover-view>';
$scope.popover = $ionicPopover.fromTemplate(template, {
scope: $scope
});
$scope.openPopover = function($event) {
$scope.popover.show($event);
};
$scope.closePopover = function() {
$scope.popover.hide();
};
//Cleanup the popover when we're done with it!
$scope.$on('$destroy', function() {
$scope.popover.remove();
});
// Execute action on hide popover
$scope.$on('popover.hidden', function() {
// Execute action
});
// Execute action on remove popover
$scope.$on('popover.removed', function() {
// Execute action
});
})
如我的评论所述,您应该创建一个根模板视图,其中包含一个单独的控制器,用于保存所有视图共享的逻辑。以下面的设置为例:
"Root Template":(包含菜单按钮)
<!-- templates/root.html -->
<div>
<ion-nav-bar class="bar-positive">
<ion-nav-buttons side="right">
<button class="button icon ion-android-more-vertical" ng-click="showMenu($event)"></button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-nav-view name="content"></ion-nav-view>
</div>
短划线模板:
<!-- views/dash.html -->
<ion-view view-title="Dash View">
<ion-content>
Hello World!
</ion-content>
</ion-view>
各州:
$stateProvider
.state('root', {
url: '/root',
abstract: true,
templateUrl: 'templates/root.html',
controller: 'RootCtrl'
})
.state('root.dash', {
url: '/sub',
views: {
'content': {
controller: 'DashCtrl',
templateUrl: 'views/dash.html'
}
}
})
在 DashCtrl
中,您将使用逻辑来处理弹出窗口。因此这个控制器必须实现showMenu($event)
函数。
如果您确实需要弹出窗口模板,您可以在 templates/root 的 html 中定义模板。html 或在 **RootController.js".
的代码中
最后,我在单个控制器中创建了单个功能,具有一个通用菜单 header。谢谢。
我知道 OP 解决了他的问题,但采用的方式与最初要求的方式不同。 OQ 是如何做一个全局弹出窗口...接受的答案是做控制器视图。
但是要做一个全局弹出窗口,我就是这样做的。我敢肯定有些人可能会反对,因为 $rootScope 的依赖性,但这是一个可行的解决方案:
在app.js中:
var popoverPromise = $ionicPopover.fromTemplateUrl('templates/windowPopup.html', {
scope: $rootScope,
focusFirstInput:false
});
popoverPromise.then(function(popover) {
$rootScope.msgPopover = popover;
});
$rootScope.globalPopover = function(tpt,tps,tpm,tps1,tpm1,tpa,tpc) {
popoverPromise.then(function(popover) {
$rootScope.popInfo.title = tpt ;
$rootScope.popInfo.sub = tps ;
$rootScope.popInfo.msg = tpm ;
$rootScope.popInfo.sub1 = tps1;
$rootScope.popInfo.msg1 = tpm1 ;
$rootScope.popInfo.action = tpa ;
$rootScope.popInfo.color1 = tpc ;
$popover.show();
}) ;
}
$rootScope.globalClosePopover = function() {
$rootScope.msgPopover.hide();
}
然后从您需要的所有各种控制器中,注入 $rootScope:
$rootScope.globalPopover(a,b,c,d,e,f,g) ;
如果您不需要在任何地方都需要它(例如在您的 init/register/startup 控制器中的应用程序中),则可以将所有这些都放在您的 Tabs-Controller.
中
对于我的 ionic v1 应用程序,我需要在右上角添加一个 header 菜单(如 bootstrap 菜单)。当我单击此按钮时,我需要显示具有相同 ng-click 事件的菜单。对于图形要求,我需要一个菜单,没有侧边菜单。 发现 $ionicPopover,我认为这是我的解决方案。 我的问题是关于菜单功能。我的想法是为所有菜单使用 html 模板,并为我的所有应用程序将弹出功能放在可访问的同一位置。有可能吗? 仅找到我需要为每个控制器实现弹出功能的示例。 例如,这是一个简单的控制器。我需要为我的所有项目全局定义 popover 函数。弹出窗口定义相同。有可能吗?谢谢
.controller('DashCtrl', function($scope, $ionicLoading, $ionicPopover) {
// .fromTemplate() method
var template = '<ion-popover-view>' + '<ion-header-bar>' +
'<h1 class = "title">Popover Title</h1>' +
'</ion-header-bar>'+ '<ion-content>' +
'Popover Content!' + '</ion-content>' + '</ion-popover-view>';
$scope.popover = $ionicPopover.fromTemplate(template, {
scope: $scope
});
$scope.openPopover = function($event) {
$scope.popover.show($event);
};
$scope.closePopover = function() {
$scope.popover.hide();
};
//Cleanup the popover when we're done with it!
$scope.$on('$destroy', function() {
$scope.popover.remove();
});
// Execute action on hide popover
$scope.$on('popover.hidden', function() {
// Execute action
});
// Execute action on remove popover
$scope.$on('popover.removed', function() {
// Execute action
});
})
如我的评论所述,您应该创建一个根模板视图,其中包含一个单独的控制器,用于保存所有视图共享的逻辑。以下面的设置为例:
"Root Template":(包含菜单按钮)
<!-- templates/root.html -->
<div>
<ion-nav-bar class="bar-positive">
<ion-nav-buttons side="right">
<button class="button icon ion-android-more-vertical" ng-click="showMenu($event)"></button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-nav-view name="content"></ion-nav-view>
</div>
短划线模板:
<!-- views/dash.html -->
<ion-view view-title="Dash View">
<ion-content>
Hello World!
</ion-content>
</ion-view>
各州:
$stateProvider
.state('root', {
url: '/root',
abstract: true,
templateUrl: 'templates/root.html',
controller: 'RootCtrl'
})
.state('root.dash', {
url: '/sub',
views: {
'content': {
controller: 'DashCtrl',
templateUrl: 'views/dash.html'
}
}
})
在 DashCtrl
中,您将使用逻辑来处理弹出窗口。因此这个控制器必须实现showMenu($event)
函数。
如果您确实需要弹出窗口模板,您可以在 templates/root 的 html 中定义模板。html 或在 **RootController.js".
的代码中最后,我在单个控制器中创建了单个功能,具有一个通用菜单 header。谢谢。
我知道 OP 解决了他的问题,但采用的方式与最初要求的方式不同。 OQ 是如何做一个全局弹出窗口...接受的答案是做控制器视图。
但是要做一个全局弹出窗口,我就是这样做的。我敢肯定有些人可能会反对,因为 $rootScope 的依赖性,但这是一个可行的解决方案:
在app.js中:
var popoverPromise = $ionicPopover.fromTemplateUrl('templates/windowPopup.html', {
scope: $rootScope,
focusFirstInput:false
});
popoverPromise.then(function(popover) {
$rootScope.msgPopover = popover;
});
$rootScope.globalPopover = function(tpt,tps,tpm,tps1,tpm1,tpa,tpc) {
popoverPromise.then(function(popover) {
$rootScope.popInfo.title = tpt ;
$rootScope.popInfo.sub = tps ;
$rootScope.popInfo.msg = tpm ;
$rootScope.popInfo.sub1 = tps1;
$rootScope.popInfo.msg1 = tpm1 ;
$rootScope.popInfo.action = tpa ;
$rootScope.popInfo.color1 = tpc ;
$popover.show();
}) ;
}
$rootScope.globalClosePopover = function() {
$rootScope.msgPopover.hide();
}
然后从您需要的所有各种控制器中,注入 $rootScope:
$rootScope.globalPopover(a,b,c,d,e,f,g) ;
如果您不需要在任何地方都需要它(例如在您的 init/register/startup 控制器中的应用程序中),则可以将所有这些都放在您的 Tabs-Controller.
中