javascript - 我可以用两个元素替换 Angular 指令吗?

标签 javascript angularjs angularjs-directive

我正在写一个<password>指令将包含 <input>随后是 <span> (允许用户显示/隐藏密码的图标)。是否可以让 Angular 用这两个元素替换 HTML 中的指令元素,并将指令元素上存在的所有属性应用到 <input>元素?

所以:

<password ng-model="myVar" ng-change="myTrigger" ng-whatever="myWhatever"></password>

会变成:

<span>
    <input type="password" ng-model="myVar" ng-change="myTrigger" ng-whatever="myWhatever"/>
    <span ng-click="togglePasswordVisibility()">show/hide</span>
</span>

并且如果用户将任何其他属性添加到 <password>将它们应用到 <input> .

最佳答案

您必须在元素编译时手动执行此操作:

.directive('password', function($compile) {
    return {
        restrict: 'E',
        replace: true,
        template: '<span>' +
            '<input type="password" />' +
            '<span ng-click="togglePasswordVisibility()">show/hide</span>' +
          '</span>';
        compile: function($element, $attr) {
            return function($scope, $element, $attr) {
                var input = $element.find('input[type=password]'),
                    attributes = $element.prop("attributes");
                angular.forEach(attributes, function() {
                    input.attr(this.name, this.value);
                });
                $compile($input)($scope);
            }
        }
    }
});

还没有测试过,但我认为这是可行的方法(可能不是最好的方法)

关于javascript - 我可以用两个元素替换 Angular 指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24283936/

相关文章:

javascript - 读取/"Include"某些本地文件 - 离线 - 使用 JavaScript

angularjs - 将 Angular 动画添加到预先存在的堆栈中

javascript - 在 Angular Directive(指令)中将焦点设置到文本区域

angularjs - 每当一个或其他字段模型发生变化(每次击键)时,使用 Angular 指令验证密码并确认密码字段

Angularjs:如何在指令中读取对象

javascript - Material-UI List 作为 Card 的子项,在主展开时触发所有 onClick

javascript - 从 url 获取 php 输出

javascript - 在 ECMA 第 3 阶段使用提案在统计上是否安全?

当ng-model在 Controller 中初始化时,Angularjs select ng-change不会被触发

javascript - ng-view 路由模板是否反射(reflect) ajax 请求导致的更改?