我在当前项目中使用angular-ui-bootstrap,我需要一个允许用户对给定元素执行某些操作的弹出框(重命名/编辑/删除/等...)。由于angular-ui的bootstrap popover默认情况下不允许自定义html或数据绑定,因此我复制了他们的工具提示/ popover .provider
和.directive
,以便根据我的需要进行自定义。
主要问题:关闭并重新打开弹出窗口后,ng-click绑定将丢失。
次要问题:可以设置双向数据绑定,这样我就不必手动设置scope.$parent.$parent.item
了吗?
Plunker :http://plnkr.co/edit/HP7lZt?p=preview
了解原始tooltip.js
:
.directive
是最经过修改的内容:.directive('iantooltipPopup', function () {
return {
restrict: 'E',
replace: true,
scope: { mediaid: '@', title: '=', content: '@', placement: '@', animation: '&', isOpen: '&' },
templateUrl: 'popover.html',
link: function (scope, element, attrs) {
scope.showForm = false;
scope.onRenameClick = function () {
console.log('onRenameClick()');
scope.showForm = true;
};
scope.onDoneClick = function () {
console.log('Title was changed to: ' + scope.title);
scope.showForm = false;
scope.$parent.$parent.item.title = scope.title;
scope.$parent.hide();
};
}
};
})
.provider
仅在此处更改,以便在title
字段上实现双向绑定:var template =
'<'+ directiveName +'-popup '+
// removed
// 'title="'+startSym+'tt_title'+endSym+'" '+
'title="tt_title" ' +
'content="'+startSym+'tt_content'+endSym+'" '+
'placement="'+startSym+'tt_placement'+endSym+'" '+
'animation="tt_animation()" '+
'is-open="tt_isOpen"'+
'>'+
'</'+ directiveName +'-popup>';
我感谢任何帮助,我觉得在开始使用Angular时,编译的指令和提供程序似乎是一个很大的心理障碍。我一直在试图找出并操纵这个指令,这样我就可以从中学习,就像实际需要组件本身一样。
答案 0 :(得分:21)
这是工作plunker
问题来自原始工具提示。它会在您关闭后删除工具提示,但下次打开它时,它不会再次编译工具提示。 (工具提示触发器的链接功能仅在第一次运行。)
我的方法是不删除工具提示,只需通过CSS中的display属性控制它。
我还要pull request来讨论这个问题。
我只是更新了plunker。
第二个实际上只是让它与父范围链接。但是,它将使用我的方法创建子范围。我想你也可以用手表来做。