我只是尝试重置这样的值:
$scope.initial = [
{
data1: 10,
data2: 20
}
];
$scope.datas= $scope.initial;
$scope.reset = function(){
$scope.datas = $scope.initial;
}
但是它没有产生任何东西,有解决的主意吗?
angular.module('app', []).controller('MyCtrl', function($scope) {
$scope.initial = [
{
data1: 10,
data2: 20
}
];
$scope.datas= $scope.initial;
$scope.reset = function(){
$scope.datas = $scope.initial;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="MyCtrl">
<div ng-repeat="data in datas">
<input type="text" ng-model="data.data1" />
<input type="text" ng-model="data.data2" />
</div>
<a ng-click="reset()">Reset to initial value</a>
or
<button ng-click="name = initial">Reset to initial value</button>
<hr />
<p ng-repeat="data in datas">{{data.data1}}, {{data.data2}}</p>
</div>
jsfiddle上有一个工作示例
这真的是关于JavaScript的问题(因此我添加了“ javascript”标记)。将JavaScript对象(例如$
scope.initial数组)分配给变量时,它是通过引用而不是副本来分配的。所以,这句话
$scope.datas= $scope.initial;
导致$ scope.datas指向$ scope.initial对象。对$ scope.datas或$
scope.initial所做的任何更改都会影响同一个(单个)对象。由于ng-
model用于数据绑定对象元素data1和data2,因此对文本输入的任何更改都会更改$ scope.datas引用的对象的data1和data2元素,即$
scope.initial。要查看实际效果,请将以下内容添加到小提琴的HTML中:
<p>{{initial}}</p>
当您在文本框中更改值时,您会看到$ scope.initial也正在更改。
@Max提供了部分答案:在reset函数中使用angular.copy()。但是,您还必须在初始分配中使用angular.copy():
$scope.datas = angular.copy($scope.initial);
更新:
正如@EpokK在他的回答中所示,另一种解决方案是
angular.copy($scope.initial, $scope.datas);
正如@bekite在回答中提到的那样,@ EpokK的解决方案不会创建另一个对象。
完整代码
angular.module('app', []).controller('MyCtrl', function($scope) {
$scope.initial = [{
data1: 10,
data2: 20
}];
$scope.datas = angular.copy($scope.initial);
$scope.reset = function () {
$scope.datas = angular.copy($scope.initial);
// or
// angular.copy($scope.initial, $scope.datas);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="MyCtrl">
<div ng-repeat="data in datas">
<input type="text" ng-model="data.data1" />
<input type="text" ng-model="data.data2" />
</div>
<a ng-click="reset()">Reset to initial value</a>
or
<hr />
<p ng-repeat="data in datas">{{data.data1}}, {{data.data2}}</p>{{initial}}
</div>
[fiddle](http://jsfiddle.net/wgR5c/1)
问题内容: 我是新手,我想使用Angular.js发出HTTP POST请求。我正在访问PHP脚本,这些脚本的参数只是POST变量。每个脚本返回的是一个JSON字符串。通常,以HTML格式可以发出这样的请求: 根据您的输入以及单击提交后,JSON data1将返回如下内容: 我无权访问脚本或托管它们的服务器。 我想知道Angular.js是否有可能读取JSON数据1,将该数据1与在JSON数据2中
问题内容: 我开始使用Angular.JS。 我有许多共享同一控制器的视图。每个视图都是收集存储在控制器中的数据的步骤: itemSubmitter控制器: 这是第一个视图: 此方法可以实时更新“您的文本是:”段落。 但是,在加载下一个视图时,将重置为其默认值。如何使存储在控制器实例中的值在视图之间持久化? 问题答案: 更改路线时会布置控制器。这是个好习惯,因为您不应该依赖控制器在视图之间传送数据
问题内容: 我正在尝试实现html5的pushstate而不是Angularjs使用的#导航。我曾尝试在Google上寻找答案,还尝试了没有运气的有角度的irc聊天室。 这是我的: app.js 问题答案: 将$ locationProvider注入您的配置,然后设置。 http://docs.angularjs.org/api/ng.$locationProvider 简单的例子: JS: HT
问题内容: 我是Angular.js的新手,并且阅读我知道Angular没有诸如tap,doubletap等事件。我试图与Hammer.js结合使用而没有成功。 要点代码 现在我已经添加到我的html文件中 但是,当我尝试在我的html中使用它时,它不起作用。 我尝试过 没有人可以解决这个麻烦吗? 问题答案: 快去 将Hammer.js和jquery.hammer.js添加到您的解决方案中。使用J
问题内容: 我正在修改其内部html的指令。到目前为止的代码: 它起作用,除了内部html不按angular求值。我想触发的子树重估。有没有办法做到这一点? 谢谢 :) 问题答案: 你必须像你的内部html一样
问题内容: 使用.NET Razor视图和AngularJS时的最佳做法是什么? 语境 我们正在使用带有剃须刀的mvc4 开发一个 公共网站 (而不是Intranet应用程序),并且我们对客户端脚本不是很熟悉,因此我们从知道的内容开始:jQuery。但是现在事情变得更加复杂了,我们想切换到AngularJS。 在.NET部分,我们使用Razor模板和(加上一些自定义模板)呈现正确的html“控件”