有時,當兩個變量指向同一個變量,他們沒有這樣的結合在一起:傳遞參考時Angularjs數據綁定?
var option = 1;
$scope.a = option;
$scope.b = option;
當你改變$ scope.a,$ scope.b不會改變。看到這個Plunker
然而,有時它們是結合在一起的,例如,它發生在我身上的這樣一個模式:
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隨之改變。
爲什麼這樣?
謝謝!
在第一種情況下,被分配的公共變量是一個整數,它是一個值類型。在第二種情況下,它是一個對象,它是一個引用類型。這意味着,在第一種情況下,您將值1賦值給兩個範圍變量,因此不存在彼此的鏈接,而在另一種情況下,您不復制數據對象,而是將引用分配給原始目的;因此當物體改變時,參考反映了這一點。 – GPicazo
我明白了。因此,當涉及到對象時,我總是需要使用angular.copy()來剪切綁定? – Tong