我正在创建一个简单的程序,我需要存储一定范围的值以供以后使用。范围本身的值可能会改变,但随后我的旧变量将被使用并将返回所需的值。
HTML:
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<button ng-click="new()">New Name</button>
<button ng-click="old()">Old Name</button><br/>
{{name}}
<script>
//module declaration
var app = angular.module('myApp',[]);
//Controller declaration
app.controller('myCtrl',function($scope){
$scope.new = function(){
$scope.name = "Lina";
var store = $scope.name;
$scope.name = "Peter";
}
$scope.old = function(){
$scope.name = store;
}
});
</script>
</body>
</html>
期望:
On click of Old 'Lina' must appear.
结果:
On click of Old "Peter" does not change!
唉,我需要一些方法来存储某些范围对象的值,以便在以后的阶段使用。有人可以帮忙???
答案 0 :(得分:1)
问题在于store
当使用var
定义时,JavaScript中的变量范围限定为封闭函数,这意味着在store
中读取$scope.old
时,实际读取的是未初始化的变量
这将“共享”整个控制器的变量,因为范围将是控制器定义的封闭功能。该变量在嵌套函数中可见。
app.controller('myCtrl',function($scope){
var store;
$scope.new = function(){
...
store = xyz;
答案 1 :(得分:1)
根据我的经验,我正在使用其他变量复制旧数据来处理这种情况。
示例:
假设我有一个变量 xyz在我的范围内 所以我将在xyzold中创建一个变量。 在xyzold中,我会复制这些数据,但要处理你必须遵循的数据。
$scope.xyzold = angular.toJson($scope.xyz);
$scope.xyzold = JSON.parse($scope.xyzold);
使用此代码,只要xyz发生更改,您就可以复制旧数据n对旧数据不会产生任何影响