【问题标题】:Passing An Ng-Model Value to A Directive将 Ng 模型值传递给指令
【发布时间】:2019-08-13 23:38:07
【问题描述】:

我看过之前的答案,但我不确定它们是否是我需要的答案。

我有一个指令,我们称之为“selectValue”。一个值可以有一个默认值,我们称之为“$scope.default”。

指令在一个地方看起来像这样:

<select-value ng-model="data.input" controlId="inputSelector" />

但它会在另一个看起来像这样:

<select-value ng-model="myValue" controlId="inputSelector" />

我没有使 ng-model 输入相同的选项;它们在不同的地方使用,这是一个遗留代码库。

这是指令的定义:

    .directive('selectValue', ['$timeout', function($timeout) {

    const directive = {
        restrict: 'E',
        scope: {
            controlId: '@',  
            model: '=?'
        },
        controller: 'selectValueCtrl',
        template: '<input id="{{controlId}}" name="{{controlId}}" placeholder="Enter Value" type="text" ng-model="model" />'
    };

    return directive;
}

问题:我该怎么做才能在&lt;select-value&gt; 的“模型”属性中输入不同的输入以使其访问不同的范围变量?

编辑:引用的“重复”问题是指为 ng-click 设置值,而不是在表单控件中引用 ng-model。

【问题讨论】:

  • 你试过model: '@' 在指令中绑定作用域吗?
  • 应该避免在元素指令中使用自闭合语法。它会导致 HTML5 出现意外行为。始终包含结束标记 &lt;/select-value&gt;

标签: angularjs


【解决方案1】:

据我所知,您似乎正在尝试使用预设值传递默认值。您面临的问题是您的选择值元素正在使用 ng-model 指令来尝试传递数据,但是您在指令中的绑定是“模型”。

要解决此问题,只需将“ng-model”更改为“model”,您的绑定就可以正常工作了。

最后,你的元素应该是这样的:

<select-value model="myValue" controlId="inputSelector" />

相对于:

<select-value ng-model="myValue" controlId="inputSelector" />

【讨论】:

  • 应该避免在元素指令中使用自闭合语法。它会导致 HTML5 出现意外行为。始终包含结束标记 &lt;/select-value&gt;
猜你喜欢
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多