AngularJS Scope变量Unwatch

时间:2015-04-01 13:32:55

标签: javascript angularjs angularjs-scope

我想在程序中的某个点之后取消观察一个Angular范围变量。

以下是我所关注的内容。

$scope.oldVar = {data: "Something"}
$scope.blankArray = []
$scope.blankArray.push($scope.oldVar)

现在我对$ scope.oldVar所做的任何更改都反映了我在屏幕上查看的blankArray的更改。

是否有任何方式限制角色?

1 个答案:

答案 0 :(得分:0)

使用angular.copy

您可以使用angular.copy创建新的数据副本。这样可以防止数据在blankArray内被绑定。

因此,在您的应用程序的某个时刻,要取消绑定值,您可以使用angular.copy

$scope.blankArray = angular.copy($scope.blankArray)

Here Be Dragons

解除绑定值的问题在于,您将引入复杂性,因为您的控制器现在需要知道何时绑定值以及何时绑定值。这引入了一个额外的状态来管理,现在你需要所有的逻辑来提高这种意识。

示范

function ctrl($scope) {
    $scope.oldVar = {data: "Something"};
    $scope.blankArray = [];
    $scope.blankArray.push($scope.oldVar);
    $scope.withoutCopy = []
    $scope.withoutCopy.push($scope.oldVar);
    
    $scope.change = function() {
        $scope.oldVar.data = Math.random();
    };
  
    $scope.unbind = function() {
        $scope.blankArray = angular.copy($scope.blankArray);
    };
};
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app ng-controller="ctrl">
    <button ng-click="change()">Test</button>
    <button ng-click="unbind()">Unbind</button>
    <pre>{{ blankArray | json }}</pre>
    <pre>{{ oldVar | json }}</pre>
    <pre>{{ withoutCopy | json }}</pre>
</div>