Ionic v1全球$ ionicPopover菜单

时间:2017-06-16 07:39:54

标签: angularjs ionic-framework ionic-view

对于我的离子v1应用程序,我需要在右上角添加一个标题菜单(如引导菜单)。当我单击此按钮时,我需要显示具有相同ng-click事件的菜单。对于图形要求,我需要一个菜单​​,没有侧面菜单。 找到$ ionicPopover,我认为这是我的解决方案。 我的问题是关于菜单功能。我的想法是为所有菜单使用html模板,并将popover函数放在accessibile的所有应用程序中。有可能吗? 仅找到我需要实现弹出功能的每个控制器的示例。 例如,这是一个简单的控制器。我需要为我的所有项目全局定义popover函数。与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
   });
})

3 个答案:

答案 0 :(得分:0)

如我的评论中所述,您应该创建一个带有单独Controller的根模板视图,该Controller保存所有视图共享的逻辑。以下面的设置为例:

&#34;根模板&#34;:(包含菜单按钮)

<!-- 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&#34;的代码中定义模板。

答案 1 :(得分:0)

最后,我在单个控制器中创建单个功能,具有通用菜单标题。感谢。

答案 2 :(得分:0)

我知道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中。