链接2 javascript对象

链接2 javascript对象,javascript,angularjs,Javascript,Angularjs,我正在开发angularJS应用程序,发现了一个无法解决的问题。我有一个带有预定义文本的变量,我想在电子邮件中用实际值替换它,它如下所示: $scope.predefinedVars = { 'client_name': $scope.itemPartner.name, 'client_city': $scope.itemPartner.city, 'client_county': $scope.itemPartner.county, 'client_addres

我正在开发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
对象时,是否有方法强制更改值

问题是您已经将
预定义变量
对象的字段设置为原语。在javascript中,原语是通过值传递的,而不是通过引用传递的(如果您不确定这意味着什么,请使用google)

结果是,对最初用于设置对象的对象的任何引用都将丢失

您有两种选择:

  • 不要使用
    $scope.predefinedVars
    中的数据替换电子邮件,而是使用
    $scope.itemPartner
    中的数据。这是较少的工作

  • 创建一个重新填充预定义变量的函数

  • e、 g


    非常感谢你,Ed Hinchliffe,我实施了第二个选择,这是一个好主意:)
    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);
    });