gpt4 book ai didi

传递引用时 Angularjs 数据绑定(bind)?

转载 作者:行者123 更新时间:2023-12-03 22:26:57 25 4
gpt4 key购买 nike

有时,当两个变量引用同一个变量时,它们不会像这样绑定(bind)在一起:

  var option = 1;
$scope.a = option;
$scope.b = option;

当您更改 $scope.a 时,$scope.b 不会更改。看这个Plunker

但是,有时它们会绑定(bind)在一起,例如它发生在我身上的模态是这样的:

angular.module('plunker', ['ui.bootstrap']);
var ModalDemoCtrl = function($scope, $modal, $log) {

$scope.testDataArray = [{
"name": "Doe"
}, {
"name": "Deer"
}, {
"name": "Female"
}];


$scope.open = function(testData) {

var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: ModalInstanceCtrl,
resolve: {
data: function() {
return testData;
}
}
});

modalInstance.result.then(function(selectedItem) {
$scope.scopeData = selectedItem;
}, function() {
$log.info('Modal dismissed at: ' + new Date());
});
};
};

// Please note that $modalInstance represents a modal window (instance) dependency.
// It is not the same as the $modal service used above.

var ModalInstanceCtrl = function($scope, $modalInstance, data) {
$scope.modalData1 = data;
$scope.modalData2 = data;

$scope.ok = function() {
$modalInstance.close($scope.modalData);
};

$scope.cancel = function() {
$modalInstance.dismiss('cancel');
};
};

参见 Plunker .这里“modalData1”和“modalData2”都是指“数据”。在这个 Plunker 的任何模式中,您更改 modalData1,然后 modalData2 随之更改。

为什么会这样??

谢谢!

最佳答案

更新:
您应该复制该元素,因为由于 javascript 是按引用传递的,因此这两个变量(引用)实际上都指向同一个对象。如果你想消除这种副作用,你必须在分配之前复制对象:

$scope.modalData1 = angular.copy(data);
$scope.modalData2 = angular.copy(data);

plunker

原始答案:

在示例中,您提供的 modalData2 输入随 modalData1 发生变化,因为它们在 ng-model 属性中分配了相同的模型:

<div class="modal-body">
modalData1:
<input ng-model="modalData1" />
<br>
modalData2:
<input ng-model="modalData1" />
</div>

当我修复它时,它们是独立的(plunker):

<div class="modal-body">
modalData1:
<input ng-model="modalData1" />
<br>
modalData2:
<input ng-model="modalData2" />
</div>

然后当你更新 modalData1 输入时,那么其他的都不会改变。

关于传递引用时 Angularjs 数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com