0

是否有可能做这样的事情:

<field:text id="foo" label="Foo Label" model="model.foo" placeholder="foo" />

这将被编译为:

<div class="control-group">
   <label class="control-label" for="foo">Foo Label</label>
   <div class="controls">
      <input type="text" id="foo" placeholder="foo" ng-model="model.foo">
   </div>
</div>

我试图做一个例子,但 Plunker 不让我保存我的例子......上传到 dropbox:https ://dl.dropbox.com/u/2862814/plunk.zip

该示例中断了诸如 ng-change 之类的内容。这是由于编译了 ng-change 指令。我以 fieldText 指令的高优先级尝试了它,但没有修复它。

4

1 回答 1

3

您在示例中非常接近,但您必须将 ng-change 放在模板中的输入字段上。你的旧代码:

<field:text ng-change="updateHidden()" ...

将此更改为

<field:text change="updateHidden()" ...

并在指令中(参见http://docs.angularjs.org/guide/directive - & 或 &attr - 提供了一种在父范围的上下文中执行表达式的方法。)

{scope:{change:'&' ...

最后是指令模板

<input ng-change="change()" ...

这是一个修改和工作的 plunkr:http ://plnkr.co/edit/QmQjGQQBRtDmkCka0dul?p=preview

<field:text id="too" label="Too" model="model.too" placeholder="too" change="updateHidden()"></field:text>

<script type="text/ng-template" id="/tpl.html">
<div class="control-group">
   <label class="control-label" for="{{id}}">{{label}}</label>
   <div class="controls">
      <input ng-change="change()" type="text" id="{{id}}" placeholder="{{placeholder}}" 
      ng-model="model">
   </div>
</div>
</script>

directive('fieldText',function(){
  return {
    restrict:'E',
    templateUrl:'/tpl.html',
    scope:{change:'&',id:'@',model:'=',placeholder:'@',label:'@'}
  }
})
于 2013-04-10T08:16:48.493 回答