【问题标题】:Angular-UI-Bootstrap custom tooltip/popover with 2-way data-binding具有 2 向数据绑定的 Angular-UI-Bootstrap 自定义工具提示/弹出框
【发布时间】:2013-07-12 05:56:30
【问题描述】:

我在我当前的项目中使用angular-ui-bootstrap,并且我需要一个弹出框,允许用户对给定元素采取一些操作(重命名/编辑/删除/等...)。由于 angular-ui 的引导弹出框默认情况下不允许自定义 html 或数据绑定,因此我复制了他们的工具提示/弹出框 .provider.directive 以根据我的需要对其进行自定义。

主要问题:关闭并重新打开弹出窗口后,ng-click 绑定丢失。

次要问题:是否可以设置双向数据绑定,这样我就不必手动设置scope.$parent.$parent.item

Plunkerhttp://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 时似乎是很大的心理障碍。我一直在尝试弄清楚和操作这个指令,以便我可以从中学习,就像实际需要组件本身一样。

【问题讨论】:

  • 对于次要问题,我认为这里有关隔离范围的视频可能会对您有所帮助:egghead.io 完全披露不是垃圾邮件,但我以前曾与此人合作过,他通过视频比面对面更社交,但来自我所看到的他的作品非常聪明。
  • 第二个问题 - 无论您的输入表单有多深的嵌套对象。 title:{value:{inputValue:''}};。类似的东西 - 至于第一个问题,需要调试很多代码。 :(
  • @shaunhusain 我看过他的视频,它们对我开始很有帮助,但没有一个例子(除非我错过了一个)深入到嵌套/编译指令。跨度>
  • @rGil 我知道这是很多代码(我试图尽可能地修剪)。但我希望其中一个 angular-ui 人员可能会明白这一点,因为这只是对他们工作的一个小调整。
  • 当然。这是您添加的一个很酷的组件。当你开始使用它时,我相信很多其他人会使用它。

标签: angularjs angularjs-directive angular-ui-bootstrap


【解决方案1】:

这是工作的plunker

问题出在原始工具提示中。关闭后它会删除工具提示,但下次打开它时,它不会再次编译工具提示。 (工具提示触发器的链接功能只在第一次运行。)

我的方法是不删除工具提示,只需通过 CSS 中的显示属性控制它。

我也发了pull request 来讨论这个问题。

我只是更新 plunker。

第二个实际上只是使其与父范围链接。但是,它将使用我的方法创建一个子范围。我认为您也可以使用手表来做到这一点。

【讨论】:

  • 谢谢你!对于第二个问题,您可以在 index.html 中看到这一行:&lt;div iantooltip="Hi" iantooltip-title="item.title"&gt; 我正在尝试将数据绑定到对象item.title 而不是传递值{{item.title}}(即隔离范围'=''@')。但是我尝试在提供程序中添加一些类似scope: {title: '='} 的东西都没有奏效。
猜你喜欢
  • 2021-08-12
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2013-04-13
相关资源
最近更新 更多