javascript - 如何使用 AngularJS 中的用户输入发布到 DOM 中的现有 JSON 数据?
问题描述
我正在从外部 JSON 文件中提取内容并将内容作为一系列“卡片”发布到 dom。我有一个部分允许用户输入添加到卡片中。我的问题是如何将用户放入现有卡片的内容添加到现有卡片中并使其看起来相同?
以下是我在 HTML 中的内容。第一个控制器是用于发布 JSON 数据的模板。第二个控制器是输入部分。它收集用户输入并将其存储在master
变量中。
然后我如何使用它与其余的 JSON 数据一起发布?我刚刚从 AngularJS 网站复制并粘贴了用户输入部分并更改了一些东西,但我可能完全不同意它。
<div ng-app="app" ng-controller="ctrl as $ctrl">
<button class="index" ng-click="showDetails = ! showDetails">Index</button>
<button class="add" ng-click="showDetails = ! showDetails">Add</button>
<ul class="cards" ng-hide="showDetails">
<li class="list" ng-hide="showDogs" style="list-style:none;" ng-repeat="dog in $ctrl.dogs">
<strong>{{dog.breed}}</strong>
<br>
<strong>Description:</strong> <span>{{dog.description}}</span>
<br>
<strong>Size:</strong> <span style="color:blue;">{{dog.size}}</span>
<br>
<strong>Lifespan:</strong> <span style="color:green;">{{dog.lifespan}}</span>
<br><br>
<button class="delete" ng-click="showDogs = !showDogs">Delete</button>
</li>
</ul>
<div ng-controller="ExampleController" class="addData" ng-show="showDetails">
<h1>Add Your Own Breed</h1>
<form novalidate class="simple-form">
<label>Breed: <br><input class="inputBox" type="text" ng-model="user.breed" /></label><br />
<label>Description: <br><input class="inputBox" id="description" type="text" ng-model="user.description" /></label><br />
<label>Size: <br><input class="inputBox" type="text" ng-model="user.size" /></label><br />
<label>Lifespan: <br><input class="inputBox" type="text" ng-model="user.lifespan" /></label><br />
<input type="button" ng-click="reset()" value="Reset" />
<input type="submit" ng-click="update(user)" value="Save" />
</form>
<pre>user = {{user | json}}</pre>
<pre>master = {{master}}</pre>
</div>
</div>
如果有帮助,这里是“ExampleController”控制器的 JS 文件中的控制器:
// controller to for the Add Breeds page
.controller('ExampleController', ['$scope', function($scope) {
$scope.master = {};
$scope.update = function(user) {
$scope.master = angular.copy(user);
};
$scope.reset = function() {
$scope.user = angular.copy($scope.master);
};
$scope.reset();
}]);
解决方案
您可以通过使用数组来做到这一点:为狗取 1 个数组在 dog[] 中推送初始值并使用 ng-repeat 在 HTML 上显示
接受用户输入并推送到狗数组
$scope.dogs = [];
dog = {
"breed" : "some",
"description" : "some",
"size" : "some",
"lifespan" : "some",
}
dogs.push(dog);
<ul class="cards" ng-hide="showDetails" data-ng-repeat="dog in dogs">
<li class="list" ng-hide="showDogs" style="list-style:none;" ng-repeat="dog in $ctrl.dogs">
<strong>{{dog.breed}}</strong>
<br>
<strong>Description:</strong> <span>{{dog.description}}</span>
<br>
<strong>Size:</strong> <span style="color:blue;">{{dog.size}}</span>
<br>
<strong>Lifespan:</strong> <span style="color:green;">{{dog.lifespan}}</span>
<br><br>
<button class="delete" ng-click="showDogs = !showDogs">Delete</button>
</li>
</ul>
推荐阅读
- python - Django context_processor 没有名为的模块
- python - 卸载的 wrapt 模块:Python 不工作
- xcode - 是否可以创建独立的 Quick Look 扩展/插件?
- angular - 如何在 Angular 中使用 multipart/form-data 签署 AWS 请求?
- windows - 如何使批处理文件在继续之前等待另一个调用的所有进程完成
- c# - 如何将数据插入 EF Core 中的关系表
- node.js - 无法安装和运行 nodemon npm - Nodejs
- jenkins - 将詹金斯中的初始管理员密码提供给解锁詹金斯后,我遇到了问题
- azure - Set-AzDataFactoryV2 参数无效
- python - 如何在 Linux 中安排 Cron 作业