隔离范围在ng-repeat内不起作用

时间:2014-04-24 19:10:47

标签: angularjs

http://plnkr.co/edit/03O57QBeMLzFiwdvaWOj?p=preview

我正在尝试创建一个界面,允许用户将块添加到页面并进行编辑。用户单击“添加块”按钮,然后选择要添加的块类型。

我的问题是用户点击“添加块”后没有按钮工作。如果我在selectBlock指令中注释掉范围,按钮将起作用但是我将无法传递块ID。

// comment this out and the buttons will work
scope: {
      lrBlockId: '@'
    },

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用范围属性定义中的'&'符号为您的指令授予对函数的访问权限:

app.directive('selectBlock', function() {
  return {
    restrict: 'A',
    scope: {
      lrBlockId: '@',
      addHeaderBlock: '&',
      addGalleryBlock: '&',
      addSignupBlock: '&'
    },
    templateUrl: 'select-block-type.html'
  };
});

然后,您需要使用元素属性将正确的函数映射到这些属性中:

<div ng-if='block.type === "select"' >
    <div select-block lr-block-id="block.block_id"
      add-header-block="addHeaderBlock(block.block_id)" 
      add-gallery-block="addGalleryBlock()" 
      add-signup-block="addSignupBlock()"></div>
</div>

这是一个有效的演示:http://plnkr.co/edit/mPjNDOw3El5isHQGwSYk?p=preview