I need to create popovers that gets its content from the server.
我需要创建从服务器获取其内容的弹出窗口。
So I created the following directive:
所以我创建了以下指令:
.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");
}
}
}
}
}]);
And inside getMessage success method I need to make the popover to show. The documentation does not give any indication for that though I found comment made By Luthur here it seems like there is a popover-trigger="manual"
option. Could not find a way to trigger it programmatically
在getMessage里面的成功方法我需要让popover显示出来。文档没有给出任何指示,虽然我发现Luthur在这里发表评论似乎有一个popover-trigger =“手动”选项。找不到以编程方式触发它的方法
Update: I tried to follow Mosho advice but I am having troubles creating a popover with the custom event trigger.
更新:我试图遵循Mosho建议,但我遇到了使用自定义事件触发创建弹出窗口的麻烦。
see plnkr
Thanks!
2 个解决方案
#1
8
First, if you haven't already looked, here are the sources for tooltips and popovers:
首先,如果你还没有看过,这里有工具提示和弹出窗口的来源:
You can add custom triggers. Popovers use the $tooltip
provider:
您可以添加自定义触发器。弹出窗口使用$ tooltip提供程序:
.directive( 'popover', [ '$tooltip', function ( $tooltip ) {
return $tooltip( 'popover', 'popover', 'click' );
}]);
Where the $tooltip
's provider $get
method, used to make new tooltip
's, is defined here:
这里定义了用于制作新工具提示的$ tooltip的provider $ get方法:
this.$get = [ '$window', '$compile', '$timeout', '$parse', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $parse, $document, $position, $interpolate ) {
return function $tooltip ( type, prefix, defaultTriggerShow ) {...}
The $tooltip
provider has this method: (triggerMap is the 3 triggers that are defined in the $tooltip
provider out of the box.
$ 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 );
};
You can use it in a config block, like this:
您可以在配置块中使用它,如下所示:
myApp.config(['$tooltipProvider', function ( $tooltipProvider ) {
$tooltipProvider.setTriggers({'openTrigger': 'closeTrigger'}) ;
}]);
Then, you can create a new popover directive like this:
然后,您可以创建一个新的popover指令,如下所示:
.directive('myPopover', ['$tooltip', function ( $tooltip ) {
return $tooltip( 'myPopover', 'myPopover', 'openTrigger' );
}]);
And triggering the popover would then be as simple as element.triggerHandler( 'openTrigger' )
(or closeTrigger
) where element
is the popover.
然后触发popover就像element.triggerHandler('openTrigger')(或closeTrigger)一样简单,其中element是popover。
#2
6
I extended the popover directive in order to add an attribute "pop-show" which accepts a boolean:
我扩展了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;
});
I created a Plunker with an example of how to use this directive:
我创建了一个Plunker,其中包含如何使用此指令的示例:
#1
8
First, if you haven't already looked, here are the sources for tooltips and popovers:
首先,如果你还没有看过,这里有工具提示和弹出窗口的来源:
You can add custom triggers. Popovers use the $tooltip
provider:
您可以添加自定义触发器。弹出窗口使用$ tooltip提供程序:
.directive( 'popover', [ '$tooltip', function ( $tooltip ) {
return $tooltip( 'popover', 'popover', 'click' );
}]);
Where the $tooltip
's provider $get
method, used to make new tooltip
's, is defined here:
这里定义了用于制作新工具提示的$ tooltip的provider $ get方法:
this.$get = [ '$window', '$compile', '$timeout', '$parse', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $parse, $document, $position, $interpolate ) {
return function $tooltip ( type, prefix, defaultTriggerShow ) {...}
The $tooltip
provider has this method: (triggerMap is the 3 triggers that are defined in the $tooltip
provider out of the box.
$ 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 );
};
You can use it in a config block, like this:
您可以在配置块中使用它,如下所示:
myApp.config(['$tooltipProvider', function ( $tooltipProvider ) {
$tooltipProvider.setTriggers({'openTrigger': 'closeTrigger'}) ;
}]);
Then, you can create a new popover directive like this:
然后,您可以创建一个新的popover指令,如下所示:
.directive('myPopover', ['$tooltip', function ( $tooltip ) {
return $tooltip( 'myPopover', 'myPopover', 'openTrigger' );
}]);
And triggering the popover would then be as simple as element.triggerHandler( 'openTrigger' )
(or closeTrigger
) where element
is the popover.
然后触发popover就像element.triggerHandler('openTrigger')(或closeTrigger)一样简单,其中element是popover。
#2
6
I extended the popover directive in order to add an attribute "pop-show" which accepts a boolean:
我扩展了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;
});
I created a Plunker with an example of how to use this directive:
我创建了一个Plunker,其中包含如何使用此指令的示例: