将动态数据存储在变量中以供将来使用 - Angular.js

时间:2016-02-04 08:27:05

标签: javascript angularjs model-view-controller data-binding

我正在创建一个简单的程序,我需要存储一定范围的值以供以后使用。范围本身的值可能会改变,但随后我的旧变量将被使用并将返回所需的值。

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! 

唉,我需要一些方法来存储某些范围对象的值,以便在以后的阶段使用。有人可以帮忙???

2 个答案:

答案 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对旧数据不会产生任何影响