使用ng-model传递给函数的变量保持未定义

时间:2015-02-13 20:12:44

标签: html angularjs angular-ngmodel

创建表后,我希望使用ng-model将其<td>之一的值发送到函数中,但无论我尝试什么,变量都保持不定义。
变量应包含调用saveCron()的单元格内的值。当我试图打破cron_format单元格中的值时问题就出现了。我正在使用letters()函数分割值:

$scope.letters = function(rawname) {
    var lettersarray = rawname.split(" ");
    return lettersarray;
};

现在每个字符都有自己的输入字段,而不是一个输入字段中的所有cron_format值。

表格如下:

<table  ng-controller="tableCtrl">
    <thead>
    <th>user name</th>
    <th>script name</th>
    <th>cron format</th>
    </thead>
    <tbody ng-repeat="(user_id,row) in data">
    <tr ng-repeat="(script_id, cron_format) in row">
        <td>{{user(user_id)}}</td>
        <td>{{script(script_id)}}</td>
        <td ng-model="vm.l">
            <input type="text" ng-repeat="letter in letters(cron_format) track by $index"  value="{{letter}}"/>
            <button ng-click="saveCron(user_id,script_id,cron_format)">save</button>
        </td>
    </tr>
    </tbody>
</table>

saveCron()就像这样:

$scope.saveCron = function(userId,scriptId,cronFormat){
    console.log($scope.vm.l);
}

*在实践中我有更多:)复杂的逻辑在函数内部,但为了简单起见,我将保留这样的函数。

结论:我如何将创建调用的<td>内的整个值传递给saveCron()?

示例:如果<td>代码如下所示:

<td ng-model="vm.l">
<input value="1"><input value="2"><input value="3">
</td>

该函数将获取(log)“123”,如果用户编辑了一些输入字段,请说:

<td ng-model="vm.l">
<input value="4"><input value="2"><input value="4">
</td>

点击保存,功能将获得424 ... 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

好的,这里有一些问题。我会尽力把它们全部打掉。

所以基本上你会更好地重写这个。

首先,您正在尝试访问“vm.1”,通常angular会为您创建一个变量而无需定义它。但由于您正在使用对象,因此需要对其进行定义。所以在你的控制器里做。

$scope.vm = {};

将解决这个问题。

其次,您应该将ng-model放在输入本身而不是包装器上,它不会像现在设置的那样工作。 ng模型与任何事物无关,永远不会更新。

现在有几种不同的方法可以处理如何获得这些值。我将假设你要做的是让人们能够改变这些值,然后运行一些功能。正确的吗?

以下是我将如何做到这一点......

<td>
  <input ng-repeat='letter in whatever' ng-model='vm[user_id][$index]' value='{{letter}}'/>
  <button ng-click='saveCron(user_id,script_id,cron_format,vm[user_id])>Save</button>
</td>

因此,这会将每组输入的数据直接发送到函数中。那么你的功能就是......

$scope.saveCron = function(userId,scriptId,cronFormat,data){
    console.log(data);
}

这些方面的东西对你有用。你的ng-repeats也非常混乱,所以我也会考虑重做那些。

修改 忘了提这样做,你的数据将通过key:value

作为对象传递