在Angular中从控制器访问输入名称和值

时间:2015-09-28 00:22:34

标签: angularjs angularjs-scope angularjs-ng-repeat

我有以下输入,需要'name'和'value':

<script>
$scope.userAttributes = response.userAttributes.split(','); //$scope
/* OR */   
self.userAttributes = response.userAttributes.split(','); //controllerAs
</script>

<div class="item item-input" ng-repeat="userAttribute in userAttributes"> <!-- $scope -->
     <input type="text" name="{{userAttribute }}" dynamic-model="(userAttribute | alphanumeric | spaceToUnderscore | lowercase)">
</div>
<!-- OR -->
<div class="item item-input" ng-repeat="userAttribute in controllerAs.userAttributes"> <!-- controllerAs -->
     <input type="text" name="{{userAttribute}}" dynamic-model="'controllerAs.' + (userAttribute | alphanumeric | spaceToUnderscore | lowercase)">
</div>

<!-- Output example: -->

<input type="text" ng-model="your_age" name="Your Age"/> <!-- $scope -->
<!-- OR -->
<input type="text" ng-model="controllerAs.your_age" name="Your Age"/> <!-- controllerAs -->

nb:dynamic-model指令 - 允许您将过滤器应用于值以生成模型名称 - 例如,删除空格等。

使用以前的输出示例方法之一,如何从控制器访问名称属性“您的年龄”和用户输入的值(例如:23),例如,点击按钮。

这只是一个例子,ng重复将有不同数量的输入和变量名等,具体取决于很多因素。

由于

1 个答案:

答案 0 :(得分:2)

在我看来,根据您的具体情况,您有两种选择:

  1. 创建一个自定义指令,然后您可以通过指令的范围声明访问所有属性。
  2. 将name属性的值添加到模型中(即userAttribute.value和userAttribute.name)
  3. 以上2的例子。

    使用Javascript:

    var userAttributes = response.userAttributes.split(','); //$scope
    $scope.userAttributes = [];
    for(var attr in userAttributes){
        if(attr == "your_age"){
            $scope.userAttributes.push({value: attr, name: "Your Age"});
        }
        //...etc
    }
    

    HTML:

    <div class="item item-input" ng-repeat="userAttribute in userAttributes">
       <input type="text" name="{{userAttribute.attr}}" ng-model="userAttribute.value" />  //not sure on dynamic-model usage
    </div>