链接2个javascript对象

时间:2014-03-10 16:33:16

标签: javascript angularjs

我正在开发一个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对象时,有没有办法强制更改值?

1 个答案:

答案 0 :(得分:1)

问题是您已将predefinedVars对象的字段设置为基元。在javascript中,原语是按值传递的,而不是通过引用传递的(谷歌如果你不确定这意味着什么)。

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

您有几种选择:

  1. 不使用$scope.predefinedVars中的数据替换电子邮件,而是使用$scope.itemPartner中的数据。这不是一件好事。

  2. 创建一个重新填充predefinedVars

  3. 的函数

    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);
    });