8

(1)我有一个名为 transcluding 的指令portlet,它获取其内容并将其包装在一些样板代码中。例如:

<portlet>
  <div class="foobar">My content</div>
</portlet>

遍历 的模板portlet,即:

<div class="portlet">
  <div class="icon"></div>
  <div class="content" ng-transclude="">          
  </div>
</div>

并变成:

<div class="portlet">
  <div class="icon"></div>
  <div class="content">
      <div class="foobar">My content</div> <!--the original content
                                         passed to portlet-->
  </div>

(2)我还有两个指令,dyn-form并且dyn-form-field. 是这样描述的:

<dyn-form>
   <dyn-form-field type="textbox" placeholder="..." label="Name" />
   <! ...and so on... -->
</dyn>

dyn-form的模板:

<form class="..." ng-transclude="">
</form>

每个dyn-field的模板都会生成用于为其生成标签/字段的 html。所以原始代码被翻译成这样的:

<form class="...">
  <label>Name: <input type="text" placeholder="..." /></label>
  <!- ....and so on... -->
 </form>

(3)问题来了。我想使用第三条指令,dyn-form-portlet生成样板代码以显示每个表单上方显示的一些按钮,然后显示一个 portlet,并将其放入dyn-formportlet 内部。这就是我尝试这样做的方式:

<dyn-form-portlet>
   <dyn-form>
     <dyn-form-field />
   </dyn-form>
</dyn-form-portlet>

dyn-form-portlet的模板如下所示:

<div class="dyn-form-portlet">
  <button>Foo</button>
  <button>Bar</button>
  <portlet ng-transclude="">
  </portlet>
</div>      

从理论上讲,这应该有效,即<dyn-form>应该放在里面<portlet><dyn-form-field>里面<dyn-form>,等等。但是当我运行它时,我只看到显示的按钮dyn-form-portlet和代码portlet,但是portlet是空的,并且表单没有显示在其中。

我做错了什么,还是这是一个错误?

4

1 回答 1

5

我设法解决了这个问题。我transclude : 'element'replace : trueonportlet指令一起使用,并且我给它priority的值比其他指令更高。我这样做的原因是感觉而不是对角内部运作的深入了解。

关于第一部分 transclude : 'element'的使用是因为

'element' - 包含整个元素,包括以较低优先级定义的任何指令。

使用替换是因为据我所见,当 transclude 设置为元素时总是使用它。优先是我的预感。

这是 plnkr http://plnkr.co/edit/axQ90dHOLmLNeNQ4ZlNl?p=preview

这可能不是您正在寻找的答案,但我需要深入研究角度指令才能真正了解发生了什么。无论如何,这不是一个错误,它只是糟糕的文档。

于 2013-09-30T20:35:45.910 回答