Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将自定义指令中的作用域正确应用于AngularJS中的子元素_Javascript_Html_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 将自定义指令中的作用域正确应用于AngularJS中的子元素

Javascript 将自定义指令中的作用域正确应用于AngularJS中的子元素,javascript,html,angularjs,angularjs-directive,Javascript,Html,Angularjs,Angularjs Directive,所以我有一个自定义指令: function numberPickerDirective() { return { template: template, replace: 'true', restrict: "E", scope: { id: "@", name: "@", model: "

所以我有一个自定义指令:

function numberPickerDirective() {
        return {
            template: template,
            replace: 'true',
            restrict: "E",
            scope: {
                id: "@",
                name: "@",
                model: "=",
                value: "@",
                min: "@"
            },

        }
    }
我的模板如下所示:

<div class="number-picker">

    <input id="{{id}}" name="{{name}}" ng-model="{{model}}"
        ng-value="{{value}}" value="{{value}}" min="{{min}}" required
        type="number" />

    <div class="number__controls">
        <button class="number__control-btn up-icon">
            <svg viewBox="0 2 10 5" width="10" height="5" fill-rule="evenodd">
                <path d="M10 5L5 0 0 5z"></path>
            </svg>
        </button>

        <button class="number__control-btn down-icon">
            <svg viewBox="0 2 10 5" width="10" height="5" fill-rule="evenodd">
                <path d="M10 0L5 5 0 0z"></path>
            </svg>
        </button>
    </div>
</div>
在我看来,我在应用该指令时:

<number-picker 
    id="inteval"
    name="SizeSec"
    ng-model="m.SizeSec"
    value="30"
    min="1"
    required
    type="number"
    />

问题是,当我希望将所有范围变量应用于输入标记时,它们都应用于顶级div。有人能解释为什么会发生这种情况以及如何修复它吗?

这可能是因为您使用了replace:true。在这种情况下,angularjs需要在某个地方应用您的属性,只需输入replace:false即可修复它。请注意,这其实并不重要,在一天结束时,属性会正确应用于输入

此外,最好使用假值,因为Angular 2+不允许您用其内容替换指令,因此它将帮助您更轻松地迁移到Angular 2+

此外,你会想

用model替换{{model}},否则它将无法工作。 使用ng值而不是值以避免在Chrome developer工具栏中出现警告。 请注意,我使用NG1.7.2对其进行了测试,结果与预期一致


请参见。

我不理解您的问题,您是否介意将其重新表述?当我在呈现元素时检查元素时,结果是:由于某种原因,并非所有参数都应用于错误的元素。啊哈!我认为是模型的改变解决了这个问题。但现在是div和input?你是什么意思?如果您坚持使用replace:true,我的指令标记将消失,因此angularjs将您的属性应用于第一个子元素,因此您的div。这就是为什么我建议您使用replace:false来确保属性应用于我的指令,而不是第一个元素。此外,它更干净,更符合web组件样式。顺便说一句,我在我的回复中添加了一个plunker让你看。啊,我传递的是'false'而不是false。谢谢你的帮助!