我正在开发一个angularJS应用程序,我发现了一个我无法解决的问题。我有一个带有预定义文本的变量,我想在电子邮件中替换实际值,它看起来像这样:
$scope.predefinedVars = {
'client_name': $scope.itemPartner.name,
'client_city': $scope.itemPartner.city,
'client_county': $scope.itemPartner.county,
'client_address': $scope.itemPartner.address,
'client_phone': $scope.itemPartner.phone,
'client_email': $scope.itemPartner.email
};
依旧......
稍后,当我选择合作伙伴时,itemPartner
对象会更改数据。例如:我有一个功能,当我从选择框中更改伙伴时观察:
$scope.$watch('newContract.partner_id', function() {
$scope.itemPartner = _.where($scope.listPartners, {'id': $scope.newContract.partner_id})[0];
alert(JSON.stringify($scope.itemPartner));
});
现在,在警报中,我可以看到itemPartner
数据已更改,但如果我尝试读取第一个变量$scope.predefinedVars
中的值,则值仍为空且不会更改。
当我更改itemPartner
对象时,有没有办法强制更改值?
答案 0 :(得分:1)
问题是您已将predefinedVars
对象的字段设置为基元。在javascript中,原语是按值传递的,而不是通过引用传递的(谷歌如果你不确定这意味着什么)。
结果是,对您最初设置它的对象的任何引用都将丢失。
您有几种选择:
不使用$scope.predefinedVars
中的数据替换电子邮件,而是使用$scope.itemPartner
中的数据。这不是一件好事。
创建一个重新填充predefinedVars
e.g。
function populatePredefinedVars (partner){
$scope.predefinedVars = {
'client_name': partner.name,
'client_city': partner.city,
'client_county': partner.county,
'client_address': partner.address,
'client_phone': partner.phone,
'client_email': partner.email
};
}
$scope.$watch('newContract.partner_id', function() {
$scope.itemPartner = _.where($scope.listPartners, {'id': $scope.newContract.partner_id})[0];
populatePredefinedVars($scope.itemPartner);
});