javascript - 如何将 ng-repeat 与 ng-model 一起使用并获取 ID
问题描述
我有一个表格ng-model="award.myProperty"
。有一些输入和texareas。在我的服务中,我有一个 textareas 数组:
allQuestions = [
id: 'XXX', question: 'some text',
id: 'YYY', question: 'some text',
id: 'ZZZ', question: 'some text',
];
我的目标是从这种结构的文本区域中获取数据
questions: [{
'XXX': 'data from textarea1',
'YYY': 'data from texarea2',
'ZZZ': 'data from textarea3',
}];
我尝试将 ng-repeat 与 一起使用ng-model
,但ng-model
不返回 ID。如果我使用$index
withng-repeat
那么我得到一个数组:
[{ 0: 'data from textarea1',
1: 'data from textarea2',
2: 'data from textarea3',}]
结构很好,但这不是我的服务ID。
服务
const allQuestions = [
{ id: 'XXX', question: 'question1' },
{ id: 'YYY', question: 'question2' },
{ id: 'ZZZ', question: 'question3' },
];
getQuestion() {
return allQuestions;
},
控制器
$scope.allQuestions = awards_service.getQuestion();
$scope.award = {
description: '',
questions: [],
};
看法
<form name="awardForm">
<input ng-model="award.description"></input>
<div ng-repeat="question in allQuestions">
<textarea ng-model="award.questions"></textarea>
</div>
</form>
也许有比ng-repeat
.
解决方案
在您的控制器中更改$scopre.award.questions
为:
$scope.allQuestions = awards_service.getQuestion();
$scope.award = {
description: '',
questions: [{}]
};
然后在视图中:
<form name="awardForm">
<input ng-model="award.description"></input>
<div ng-repeat="question in allQuestions">
<textarea ng-model="award.questions[0][question.id]"></textarea>
</div>
</form>
演示:
angular.module("myApp", [])
.controller('myCtrl', ['awards_service', '$scope', function(awards_service, $scope) {
$scope.allQuestions = awards_service.getQuestion();
$scope.award = {
description: '',
questions: [{}],
};
$scope.submit = function() {
console.log($scope.award);
// submit your form then reset the award object
// ...
$scope.award = {
description: '',
questions: [{}],
};
}
}])
.factory('awards_service', function() {
const allQuestions = [
{ id: 'XXX', question: 'question1' },
{ id: 'YYY', question: 'question2' },
{ id: 'ZZZ', question: 'question3' },
];
return {
getQuestion() {
return allQuestions;
}
}
});
.as-console-wrapper { height: 70px !important; overflow: auto; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="myCtrl">
<form name="awardForm" ng-submit="submit()">
<label>Description</label><br>
<input ng-model="award.description"></input><br>
<label>Questions</label><br>
<div ng-repeat="question in allQuestions">
<textarea ng-model="award.questions[0][question.id]" placeholder="Enter a question"> </textarea>
</div>
<input type="submit" value="submit" />
</form>
</div>
</div>
推荐阅读
- powershell - Powershell unregister-ScheduledTask
- javascript - 运行实际应用程序时运行 jest 测试时的 Javascript 堆栈跟踪 VS 堆栈跟踪
- javascript - 我可以在 javascript 中使用模板文字来处理必须是单行的长文本,并且为了*可读性*它是多行的吗?
- node.js - 我们是否应该在 Typescript for Node 中使用类,或者我们在 javascript 导出函数开发中使用的相同方式
- javascript - 如何在 JSPDF 中编辑 TextField() 的字体大小?
- javascript - 省略等待让方法并行运行是否安全?
- sql-server - T-SQL n 行表示 2 天之间的天数
- sql - SQL Merge - 仅插入特定列已更新的位置
- python - 图片保存后不显示
- typescript - TypeScript:具有除一个之外的任何键的对象