Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 除非在控制器内直接调用,否则返回参考变量而不是值的角度对象 问题:_Javascript_Html_Angularjs_Debugging - Fatal编程技术网

Javascript 除非在控制器内直接调用,否则返回参考变量而不是值的角度对象 问题:

Javascript 除非在控制器内直接调用,否则返回参考变量而不是值的角度对象 问题:,javascript,html,angularjs,debugging,Javascript,Html,Angularjs,Debugging,角度控制器中的对象返回一个参考变量,而不是对象属性的值。当我直接在一个控制器的内部调用该属性时,它将正确返回,但当我在前端执行相同操作时,它将返回引用变量而不是属性值 批次控制器的编辑功能 this.edit = function(lotId){ lotService.getById(lotId).then(function(response){ console.log(response.data[0]); console.log(response.dat

角度控制器中的对象返回一个参考变量,而不是对象属性的值。当我直接在一个控制器的内部调用该属性时,它将正确返回,但当我在前端执行相同操作时,它将返回引用变量而不是属性值

批次控制器的编辑功能

this.edit = function(lotId){
    lotService.getById(lotId).then(function(response){
        console.log(response.data[0]);
        console.log(response.data[0].Lot.id);
        lotService.broadcastSubLotChange(response.data[0]);
            ...
    });
}
$scope.$on('sublotChange', function() {
        $scope.lot=lotService.sublot;
        if($scope.lot.Lot==null){
            $scope.lot={'Lot':{'parentLot':{'Lot':{'id':lotService.lot.Lot.id}}}};
        }   

        console.log(lotService.sublot);
        console.log("sublot: "+$scope.lot.Lot.id);
        console.log("lot: "+$scope.lot.Lot.parentLot.Lot.id); 
  });
编辑功能控制台日志

请注意,对象中返回的属性值与直接调用时的值不同


其他信息: 批量服务广播功能

 this.broadcastSubLotChange = function(subLot){
        this.sublot=subLot;
    }
表单控制器广播侦听器

this.edit = function(lotId){
    lotService.getById(lotId).then(function(response){
        console.log(response.data[0]);
        console.log(response.data[0].Lot.id);
        lotService.broadcastSubLotChange(response.data[0]);
            ...
    });
}
$scope.$on('sublotChange', function() {
        $scope.lot=lotService.sublot;
        if($scope.lot.Lot==null){
            $scope.lot={'Lot':{'parentLot':{'Lot':{'id':lotService.lot.Lot.id}}}};
        }   

        console.log(lotService.sublot);
        console.log("sublot: "+$scope.lot.Lot.id);
        console.log("lot: "+$scope.lot.Lot.parentLot.Lot.id); 
  });
表单控制器侦听器日志

角度变量的HTML调用

  • {{lot.lot}}正确返回除“id”之外的其他内容:“{lot.lot.id}”
  • {{lot.lot.parentLot.lot.id}正确返回755
  • {{lot.lot.id}}返回{{lot.lot.id}

这一切都很奇怪。我最好的猜测是,当您在html中的某个地方尝试将其设置为“{lot.lot.id}”时,前端会将该
id
属性作为普通字符串覆盖。对象的这种奇怪行为之所以会发生,是因为它是在与直接记录的属性不同的时间(更晚)进行计算的,到那时它会被标记中的字符串覆盖。尝试注释html代码并再次查看控制台日志。这是我的第一个爱好,我已经尝试过了,但在阅读了您的回复后,我挖掘得更深了一点。我在sperate控制器中发现了问题。模型的$scope.id似乎是通过服务层绑定的,因此在一个控制器中修改它,在另一个控制器中更改它,而不必广播它。另一个控制器中的问题代码:
更改为:
谢谢您的帮助。这一切都很奇怪。我最好的猜测是,当您在html中的某个地方尝试将其设置为“{lot.lot.id}”时,前端会将该
id
属性作为普通字符串覆盖。对象的这种奇怪行为之所以会发生,是因为它是在与直接记录的属性不同的时间(更晚)进行计算的,到那时它会被标记中的字符串覆盖。尝试注释html代码并再次查看控制台日志。这是我的第一个爱好,我已经尝试过了,但在阅读了您的回复后,我挖掘得更深了一点。我在sperate控制器中发现了问题。模型的$scope.id似乎是通过服务层绑定的,因此在一个控制器中修改它,在另一个控制器中更改它,而不必广播它。另一个控制器中的问题代码:
更改为:
,谢谢您的帮助。