我想在程序中的某个点之后取消观察一个Angular范围变量。
以下是我所关注的内容。
$scope.oldVar = {data: "Something"}
$scope.blankArray = []
$scope.blankArray.push($scope.oldVar)
现在我对$ scope.oldVar所做的任何更改都反映了我在屏幕上查看的blankArray的更改。
是否有任何方式限制角色?
答案 0 :(得分:0)
您可以使用angular.copy
创建新的数据副本。这样可以防止数据在blankArray
内被绑定。
因此,在您的应用程序的某个时刻,要取消绑定值,您可以使用angular.copy
。
$scope.blankArray = angular.copy($scope.blankArray)
解除绑定值的问题在于,您将引入复杂性,因为您的控制器现在需要知道何时绑定值以及何时绑定值。这引入了一个额外的状态来管理,现在你需要所有的逻辑来提高这种意识。
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>