【问题标题】:Angular.js custom directive not showing up multiple timesAngular.js 自定义指令未多次显示
【发布时间】:2013-11-24 02:23:34
【问题描述】:

我正在编写一个 Angular.js 指令,以使用 Twitter Bootstrap 减少一些样板。到目前为止,我已经创建了一个 form-input 元素,它按预期显示。但是,如果我将这些指令中的许多指令放在同一个父元素中,则实际上只有第一个指令会被添加并显示出来。

谁能解释为什么?

我的标记:

<form class="form-horizontal" role="form">
        <form-input type="text" target="name1" label="Name1" placeholder="Doug" ng-model="name1"/>
        <form-input type="text" target="name2" label="Name2" placeholder="Frank" ng-model="name2"/>
    </form>

app.js

var app = angular.module('app', ['ui.router']);


app.controller('FormInputController', ['$scope', '$attrs', function($scope, $attrs){
    console.log("Controller");
}]);

app.directive('formInput', function(){
    return {
        restrict: 'E',
        controller: 'FormInputController',
        transclude: true,
        replace: true,
        require: ['^ngModel'],
        template: '<div class="form-group">'
                + '<label for="{{id}}" class="col-sm-2 control-label">{{label}}</label>'
                + '<div class="col-sm-10">'
                  + '<input type="{{type}}" class="form-control" id="{{id}}" placeholder="{{placeholder}}">'
                + '</div>'
              + '</div>',
        scope: {
            id: '@',
            label: '@',
            placeholder: '@',
            type: "@"
        },

        link: function(scope, element, attrs, ctrls) {
            console.log(arguments);
        }
    };
});

如上所述,仅显示“Doug”输入。

【问题讨论】:

标签: javascript angularjs twitter-bootstrap angularjs-directive


【解决方案1】:

您不能在指令中使用“自闭合”标签。如果您按如下方式更改您的markup,它应该可以工作:

<form class="form-horizontal" role="form">
    <form-input type="text" target="name1" label="Name1" placeholder="Doug" ng-model="name1"></form-input>
    <form-input type="text" target="name2" label="Name2" placeholder="Frank" ng-model="name2"></form-input>
</form>

基本上,HTML 解析&lt;form-input /&gt; 的方式是作为没有关闭标记的打开标记,因此您的第一个指令已启动,但从未完成,这就是为什么第一个指令似乎有效,而第二个指令无效。

参见例如thisthis 了解更多详情。

【讨论】:

  • &lt;directive-name /&gt; 标记也给我带来了问题。使用它有什么好处?
  • 在通过与我已经拥有的指令的孤立范围交谈的答案之后,在 2016 年仍然是一个有用的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多