【问题标题】:AngularJs append directive's element to its templateAngularJs 将指令的元素附加到其模板
【发布时间】:2015-10-10 12:51:23
【问题描述】:

如何将指令元素附加到其模板? 像这样:

.directive('labelize',function(){
   return {
      restrict: 'A',
      template: '<div><ng-element/></div>'
      ...
   }
});

# Html
// <input labelize name="name"/>

# Output
// <div><input name="name"/></div>

更新

当我使用这个指令时:

app.directive 'labelize', () ->
      restrict: 'A'
      requrie: 'input'
      controller: [
           '$scope', '$element', '$attrs',
           ( $scope , $element , $attrs ) ->
                  $scope.label = $attrs.placeholder
      ]
      replace: true
      transclude: 'element'
      template: '<div class="labelize"><span class="label">{{ label }}</span><ng-transclude/></div>'

使用这个 html :

<input labelize placeholder="Name" ng-class="{ 'red': true }" ng-focus="Focused()"/>

<!-- Angular compiled output -->
<div class="labelize" labelize placeholder="Name" ng-class="{ 'red': true }" ng-focus="Focused()" class="red">
    <input labelize placeholder="Name" ng-class="{ 'red': true }" ng-focus="Focused()"/>
</div>

ngFocus、ngClass 或任何 ng 属性在 labelize 指令之后不起作用。

【问题讨论】:

  • 指令元素是什么意思?
  • 绑定到指令的元素,在本例中为输入元素

标签: angularjs angular-directive


【解决方案1】:

您可以为此使用 transclue:'element' 。

 .directive('labelize',function(){
    return {
        restrict: 'A',
        template: "<div ng-transclude></div>",
        replace:true,
        transclude: "element",


    }

输入:&lt;input labelize name="name" /&gt;

输出:&lt;div labelize="" name="name" ng-transclude=""&gt;&lt;input class="ng-scope" labelize="" name="name"&gt;&lt;/div&gt;

我希望它对你有用。

【讨论】:

  • 谢谢!我的问题解决了。但是像 ng-class 这样的 ng 属性似乎无法编译并且不起作用
  • 详细更新你的问题。我可以帮忙。
  • 我不知道为什么 ngFoucs 和 ngClass 不能正常工作,因为 ngChange 和 ngClick 工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 2017-10-18
  • 2018-01-02
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
相关资源
最近更新 更多