创建表后,我希望使用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 ... 有什么帮助吗?
答案 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
作为对象传递