如何以编程方式打开和关闭Angular UI弹出窗口
How to Open and Close Angular-UI popovers programmatically
我需要创建从服务器获取内容的popover。
所以我创建了以下指令:
.directive('myPopover', [myService, function ($myService) {
return {
restrict: 'E',
transclude: true,
template: '<a href="" ng-click="wordClicked()" class="highlight" popover-trigger="manual" popover="Adequately good for the circumstances" popover-title="good enough " popover-placement="bottom" ng-transclude></a>',
link: function (scope, element, attrs) {
scope.wordClicked = function () {
if ( POPUP IS NOT SHOWING ){
var message = myService.getMessage({key: element.text()},
function () {
console.info("NEED TO SHOW POPOVER WITH "+ message);
});
}
else {
console.info("NEED TO CLOSE POPOVER");
}
}
}
}
}]);
在getMessage成功方法中,我需要制作popover来显示。尽管我发现有人发表了评论,但文件并没有对此做出任何说明Luthur在这里似乎有一个popover-trigger="manual"
选项。找不到以编程方式触发它的方法
更新:我试图遵循Mosho的建议,但我在使用自定义事件触发器创建popover时遇到了问题。
参见plnkr
谢谢!
首先,如果您还没有看过,下面是工具提示和弹出窗口的来源:
tooltip.js
popover.js
您可以添加自定义触发器。弹出窗口使用$tooltip
提供程序:
.directive( 'popover', [ '$tooltip', function ( $tooltip ) {
return $tooltip( 'popover', 'popover', 'click' );
}]);
这里定义了$tooltip
的提供者$get
方法,用于制作新的tooltip
:
this.$get = [ '$window', '$compile', '$timeout', '$parse', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $parse, $document, $position, $interpolate ) {
return function $tooltip ( type, prefix, defaultTriggerShow ) {...}
$tooltip
提供程序有这样的方法:(triggerMap是$tooltip
提供程序中现成定义的3个触发器。
/**
* This allows you to extend the set of trigger mappings available. E.g.:
*
* $tooltipProvider.setTriggers({'openTrigger': 'closeTrigger'});
*/
this.setTriggers = function setTriggers ( triggers ) {
angular.extend( triggerMap, triggers );
};
您可以在配置块中使用它,如下所示:
myApp.config(['$tooltipProvider', function ( $tooltipProvider ) {
$tooltipProvider.setTriggers({'openTrigger': 'closeTrigger'}) ;
}]);
然后,您可以创建一个新的popover指令,如下所示:
.directive('myPopover', ['$tooltip', function ( $tooltip ) {
return $tooltip( 'myPopover', 'myPopover', 'openTrigger' );
}]);
然后触发popover将像element.triggerHandler( 'openTrigger' )
(或closeTrigger
)一样简单,其中element
是popover。
我扩展了popover指令,以便添加一个接受布尔值的属性"pop-show":
angular.module('app', [ 'ui.bootstrap' ])
.directive( 'popPopup', function () {
return {
restrict: 'EA',
replace: true,
scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' },
templateUrl: 'template/popover/popover.html'
};
})
.directive('pop', function pop ($tooltip, $timeout) {
var tooltip = $tooltip('pop', 'pop', 'event');
var compile = angular.copy(tooltip.compile);
tooltip.compile = function (element, attrs) {
var first = true;
attrs.$observe('popShow', function (val) {
if (JSON.parse(!first || val || false)) {
$timeout(function () {
element.triggerHandler('event');
});
}
first = false;
});
return compile(element, attrs);
};
return tooltip;
});
我创建了一个Plunker,并举例说明如何使用此指令:
http://plnkr.co/edit/94ZHgQ?p=preview
相关文章:
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 如何在Angular UI网格中选择下一行
- 使用按钮的Angular UI网格过滤器
- Angular UI启动日期选择器问题
- 在Angular ui路由器中,如何将事件从一个视图发送到另一个视图
- 带有嵌套状态的Angular ui路由器和后退按钮
- Angular UI-GRID未在页面上显示网格
- 初始化ng模型时,Angular ui选择占位符不起作用
- Ionic + Angular ui-sref not generating href
- 在日期更改后更新Angular UI引导程序日期选择器选项
- Angular ui路由器中的绝对名称
- 访问url[材质Ui+选项卡]时,Angular Ui路由器未加载视图
- 无法将行保存在Angular UI网格中的可展开行中
- Angular UI路由器-检查父状态
- angular ui boostrap日期选择器显示年份第一
- angular ui bootstrap:当模式关闭时,promise被解析/拒绝
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 将图像传递到Angular UI引导旋转木马
- Angular UI Select2指令搜索功能不起作用