当前位置: 首页 > 面试题库 >

动态表单名称属性 在Angularjs中

羿昊英
2023-03-14
问题内容

动态创建“ inputName”时,有人将如何使用formName.inputName。$ valid?

  <form name="formName">
    <input ng-repeat="(variable) in variables"
           type="text" name="variable.name"
           ng-model="variable.name" required />
 </form>

HTML输入属性“名称”的输出将是字符串“ variablename”,该字符串将应用于所有重复输入。

如果我们尝试这个

<form name="formName">
  <input ng-repeat="(variable) in variables"
         type="text" name="{{ variable.name }}"
         ng-model="variable.name" required />
</form>

HTML输入属性“名称”的输出将是字符串“ {{variable.name}}”,该字符串将应用于所有重复输入。

在这两种情况下,将不会动态创建每个重复输入元素的name属性;所有输入将共享相同的输入名称。如果您想基于特定名称调用特定输入,则效果不佳。

  • 需要使用动态名称值
  • 需要能够调用$ scope.formName.dynamicName。$ valid
  • 需要能够调用$ scope.formName。$ valid
  • 需要将动态名称输入字段添加到嵌套表单或主表单中

问题答案:

我找不到满足部分或全部这些需求的答案。这就是我想出的。

也许有更好的方法,所以请分享您的想法。
我正在使用Angularjs 1.3.0-beta.8

我有一个带有多嵌套指令的表单,这些指令都包含输入,选择等。这些元素都包含在ng-repeats和动态字符串值中。

这是使用伪指令的方法:

<form name="myFormName">
  <nested directives of many levels>
    ex: <input ng-repeat=(index, variable) in variables" type="text"
               my-name="{{ variable.name + '/' + 'myFormName' }}"
               ng-model="variable.name" required />
    ex: <select ng-model="variable.name" ng-options="label in label in {{ variable.options }}"
                my-name="{{ variable.name + '/' + 'myFormName' }}"
        </select>
</form>

注意:如果需要序列化输入表,则可以添加字符串索引并为该字符串索引。这就是我所做的。但是,动态名称输入意味着您可能不知道表单输入的名称,因此如何调用$
scope.formName。??????。您可以迭代$ scope.formName对象以获取与某个值匹配的键。这意味着像这样的字符串连接:

my-name="{{ dynamicString + hello + '/' + 'myFormName' }}"

然后,在$ scope.myFormName中,只需遍历对象并收集包含“ hello”的任何键,即可找到任何表单输入名称。

app.directive('myName', function(){

  var myNameError = "myName directive error: "

  return {
    restrict:'A', // Declares an Attributes Directive.
    require: 'ngModel', // ngModelController.

    link: function( scope, elem, attrs, ngModel ){
      if( !ngModel ){ return } // no ngModel exists for this element

      // check myName input for proper formatting ex. something/something
      checkInputFormat(attrs);

      var inputName = attrs.myName.match('^\\w+').pop(); // match upto '/'
      assignInputNameToInputModel(inputName, ngModel);

      var formName = attrs.myName.match('\\w+$').pop(); // match after '/'
      findForm(formName, ngModel, scope);
    } // end link
  } // end return

  function checkInputFormat(attrs){
    if( !/\w\/\w/.test(attrs.rsName )){
      throw myNameError + "Formatting should be \"inputName/formName\" but is " + attrs.rsName
    }
  }

  function assignInputNameToInputModel(inputName, ngModel){
    ngModel.$name = inputName
  }

  function addInputNameToForm(formName, ngModel, scope){
    scope[formName][ngModel.$name] = ngModel; return
  }

  function findForm(formName, ngModel, scope){
    if( !scope ){ // ran out of scope before finding scope[formName]
      throw myNameError + "<Form> element named " + formName + " could not be found."
    }

    if( formName in scope){ // found scope[formName]
      addInputNameToForm(formName, ngModel, scope)
      return
    }
    findForm(formName, ngModel, scope.$parent) // recursively search through $parent scopes
  }
});

这应该可以处理许多您不知道表单在哪里的情况。也许您有嵌套的表单,但是由于某种原因您想将此输入名称附加到两个表单上?好吧,只需传递您要附加输入名称的表单名称即可。

我想要的是一种将动态值分配给我永远不会知道的输入的方法,然后只需调用$ scope.myFormName。$ valid。

这可能是一个过大的杀伤力,并且1.3+中存在更好的解决方案。我当时找不到它。现在对我有用。

祝好运!希望这可以帮助某人!!!!



 类似资料:
  • 问题内容: 如何在ng-repeat中使用动态名称命名表单? 我想动态命名每种形式。例如,将$ index添加到表单名称。我该如何实现?我在ng-repeat上尝试了ng-init,但是没有用。 问题答案: 您可以这样做: 编辑 : 您也可以使用,如下所示: 如果仅基于表单的有效性应用类,则可以将样式应用于自动添加的类,例如:

  • 问题内容: 我想序列化一个对象,以便根据字段的类型对字段之一进行不同的命名。例如: 在这里,我希望将字段序列化为类似的内容,而不是总是根据情况包含一个称为不同类型的字段。 使用Jackson怎么能达到这样的目的? 问题答案: 使用自定义。 然后,假设您要序列化以下两个对象: 第一个将打印: 第二个: 我使用了包装对象的名称,因为它仅用作花边固定器。如果要删除它,则必须为 整个 类编写一个自定义序列

  • 问题内容: 我想序列化一个对象,以便根据字段的类型对字段之一进行不同的命名。例如: 在这里,我希望将该字段序列化为类似的内容,而不是总是根据情况将字段称为包含不同类型的字段。 使用Jackson怎么能达到这样的目的? 问题答案: 使用自定义。 然后,假设您要序列化以下两个对象: 第一个将打印: 第二个: 我使用了包装对象的名称,因为它仅用作花边固定器。如果要删除它,则必须为 整个 类编写一个自定义

  • 问题内容: 有没有一种方法可以在序列化期间更改Data属性的名称,因此我可以在WEB Api中重用该类。 例如,如果我要返回用户的分页列表,则应将Data属性序列化为“用户”,如果要返回项目列表,则应将其称为“项目”,依此类推。 可能是这样的: 编辑: 我希望对此功能进行控制,例如,尽可能传递名称。如果我叫,我还是想序列化的属性被称为,没有。 例 问题答案: 您可以通过自定义进行操作。解析器可以寻

  • 问题内容: 我如何做到这一点: 问题答案: 请改用方括号表示法。 或者,在现代JavaScript中:

  • 本文向大家介绍JavaScript 动态/可变属性名称,包括了JavaScript 动态/可变属性名称的使用技巧和注意事项,需要的朋友参考一下 示例 有时,属性名称需要存储到变量中。在此示例中,我们询问用户需要查找哪个词,然后提供来自我命名的对象的结果dictionary。 注意我们如何使用[]括号表示法来查看名为word;的变量。如果我们使用传统的.表示法,那么它将按字面值取值,因此: 您也可以