【问题标题】:Apply attributes to custom nested element in an angular directive将属性应用于角度指令中的自定义嵌套元素
【发布时间】:2014-09-26 05:40:29
【问题描述】:

我目前正在使用 AngularJS 指令构建我的第一个自定义 HTML 元素。我想从 HTML5 自定义范围输入类型。到目前为止一切顺利,我迈出了成功的第一步。但现在我想使用嵌套模板来增强当前状态。此刻我有某事。像这样:

.directive("mySlider", [function () {
    return {
        restrict: "E",
        replace: true,
        scope: {
            min: "@",
            max: "@",
            step: "@?",
            ngModel: "="
        },
        template: "<input class='my-slider' type='range'>",
        link: function ($scope, $element) {

            //some logic here
        }
    }
}]);

这样,如果我使用

&lt;my-slider min="0" max="10" step="1" ng-model="sth"&gt;&lt;/my-slider&gt;

我得到了这样的替代品:

&lt;input class="my-slider" type="range" min="0" max="10" step="1" ng-model="sth"&gt;

这很好,因为作用域中的属性被写入输入类型,然后可以直接使用。

但这是我的问题:现在我想要一些输出 HTML,例如:

&lt;div&gt;

&lt;label&gt;blah&lt;/label&gt;

&lt;input class="my-slider" type="range" min="0" max="10" step="1" ng-model="sth"&gt;

&lt;/div&gt;

所以我的输入元素应该嵌套在一个 div 中,可能还有其他元素,比如标签或某事。但是当我更新我的模板并将我的输入嵌套在那里时,指令范围中的所有属性都将应用于根元素(在本例中为 div )。我不希望它们在那里,而是在输入元素上。

是否有可能以及如何将指令范围中的某些属性应用于不同的特定元素?

【问题讨论】:

    标签: javascript html angularjs templates angularjs-directive


    【解决方案1】:

    ngModel: "=" 更改为 sth: "=ngModel" 以使输入模型正常工作。使用您在此处的 cmets 中为属性指出的 {{}} 表示法。然后让你的父属性像data-min 这样你就没有丑陋的源代码。

    【讨论】:

    • 您好,感谢您的帮助。在我看来,我只是将属性从根元素复制到嵌套元素?但我只想将它们应用于输入并将它们从父 div 中删除。除此之外,我似乎无法从输入上的 my-slider 访问 ng-model。
    • 因为你的作用域中没有任何名为“sth”的东西,如果你想让它工作,你需要将你的隔离更改为sth: '=ngModel',这将为你提供一个作用域变量 sth 双向绑定到指令的 ng-model。
    • var $input 位仅将其应用于输入。如果您希望将它们从父级中删除,那么您将失去指令的灵活性。没关系,因为 div 上的“min”无论如何都不会做任何事情。如果你愿意,你可以加上 data-min 前缀,让它不那么难看。我认为角度忽略了数据前缀,因此内部代码不会改变。
    • 嗯,你是对的数据属性。我刚看到这个帖子,看起来它可以解决我的问题。对我来说看起来更干净。我不知道我可以通过 {{}} 将范围变量链接到任何元素:stackoverflow.com/a/15920467/2577116
    • 哦,是的,这更简单。这样做,编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2020-03-21
    • 2016-05-13
    相关资源
    最近更新 更多