当前位置: 首页 > 面试题库 >

使用angular.js重置模型

李谦
2023-03-14
问题内容

我只是尝试重置这样的值:

$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“控件”