Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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 控制器中的AngularJS访问对象字段_Javascript_Angularjs_Object_Factory - Fatal编程技术网

Javascript 控制器中的AngularJS访问对象字段

Javascript 控制器中的AngularJS访问对象字段,javascript,angularjs,object,factory,Javascript,Angularjs,Object,Factory,所以我得到了这个AngularJS控制器,我需要使用两种不同的服务Project和Subproject。一个通过project\u id字段链接到另一个。代码如下: bonsControllers.controller('SubprojetDetailCtrl', ['$scope', '$routeParams', 'Project', 'Subproject', function($scope, $routeParams, Project, Subproject) { $sco

所以我得到了这个AngularJS控制器,我需要使用两种不同的服务
Project
Subproject
。一个通过
project\u id
字段链接到另一个。代码如下:

bonsControllers.controller('SubprojetDetailCtrl', ['$scope', '$routeParams', 'Project', 'Subproject',
  function($scope, $routeParams, Project, Subproject) {

    $scope.subproject = Subproject.queryFalse({projectId: $routeParams.id});     

    $scope.project = Project.queryFalse({projectId: $scope.subproject.project_id});
}]);  
问题是,当我在
$scope.project
中使用或甚至在console.log上使用它时,
$scope.subproject.project\u id
的值未定义

services.js代码是:

    var bonsServices = angular.module('bonsServices', ['ngResource']);

    bonsServices.factory('Project', ['$resource',
    function($resource) {
        return $resource(URL_API + '/projects/:projectId', {}, {
            queryTrue: {method: 'GET', params: {projectId: ''}, isArray: true},         
            queryFalse: {method: 'GET', params: {projectId: ''}, isArray: false},           
            save: {method: 'POST', headers: {'Content-Type': 'application/json'}, isArray: false},
            'delete': {method: 'DELETE', params: {projectId: ''}, isArray: false},
            update: {method: 'PUT', params: {projectId: ''}, headers: {'Content-Type': 'application/json'}, isArray: false}
        });
    }]);


bonsServices.factory('Subproject', ['$resource',
    function($resource) {
        return $resource(URL_API + '/subprojects/:projectId', {}, {         
            queryFalse: {method: 'GET', params: {projectId: ''}, isArray: false}
        });
    }]);    
<div >
    <span>Client :</span> {{project.client.name}} <br />
    <span>Projet :</span> {{project.name}} <br />
    <span>Sous Projet :</span> {{'Saison ' + subproject.saison}} <br />
    <span>Type :</span> {{project.type}} {{subproject.project_id}}<br />
    <span>Nature :</span> {{subproject.nature}} <br />
</div>
模板代码为:

    var bonsServices = angular.module('bonsServices', ['ngResource']);

    bonsServices.factory('Project', ['$resource',
    function($resource) {
        return $resource(URL_API + '/projects/:projectId', {}, {
            queryTrue: {method: 'GET', params: {projectId: ''}, isArray: true},         
            queryFalse: {method: 'GET', params: {projectId: ''}, isArray: false},           
            save: {method: 'POST', headers: {'Content-Type': 'application/json'}, isArray: false},
            'delete': {method: 'DELETE', params: {projectId: ''}, isArray: false},
            update: {method: 'PUT', params: {projectId: ''}, headers: {'Content-Type': 'application/json'}, isArray: false}
        });
    }]);


bonsServices.factory('Subproject', ['$resource',
    function($resource) {
        return $resource(URL_API + '/subprojects/:projectId', {}, {         
            queryFalse: {method: 'GET', params: {projectId: ''}, isArray: false}
        });
    }]);    
<div >
    <span>Client :</span> {{project.client.name}} <br />
    <span>Projet :</span> {{project.name}} <br />
    <span>Sous Projet :</span> {{'Saison ' + subproject.saison}} <br />
    <span>Type :</span> {{project.type}} {{subproject.project_id}}<br />
    <span>Nature :</span> {{subproject.nature}} <br />
</div>

客户端:{{project.Client.name}}
项目:{{project.name}}
Sous项目:{{'Saison'+subproject.Saison}}
类型:{{project.Type}{{subproject.project_id}}}
性质:{{subproject.Nature}}
在Firebug中,我可以清楚地看到所有$scope.subproject的元素,包括project\u id

如果你们能在这个问题上给我一个提示,我将非常感激


谢谢

当然,因为子项目服务在那里有一个异步查询。当它完成时,它将回报一个承诺

bonsControllers.controller('SubprojetDetailCtrl', ['$scope', '$routeParams', 'Project', 'Subproject',
  function($scope, $routeParams, Project, Subproject) {

    Subproject.queryFalse({projectId: $routeParams.id})
    .then(function(subproject){
      $scope.subproject = subproject;
      return Project.queryFalse({projectId: $scope.subproject.project_id});
    }).then(function(project){
      $scope.project = project;
    });           
}]); 
以及firebug记录所有元素的原因,因为它将记录对对象的引用,当查询完成时,控制台日志将刷新对象数据。因此,在一些毫秒内,数据是未定义的,并将在查询完成时填充


为了确保console.logged数据在那里,只需编写
$scope.subproject.project\u id

以下代码适用于我,它遵循Konstantin的答案:

bonsControllers.controller('SubprojetDetailCtrl', ['$scope', '$routeParams', 'Project', 'Subproject',
  function($scope, $routeParams, Project, Subproject) 
  {

    var project;
    $scope.subproject = Subproject.queryFalse({projectId: $routeParams.id});
    $scope.subproject.$promise.then(function(subproject){
        project = Project.queryFalse({projectId: subproject.project_id});  
        $scope.project = project;
    }); 
  }
]);
正如你可能看到的$PROMITE。然后为我做这个把戏


谢谢你

你能提供一个plunkr或JSFIDLE吗?我可以提供服务代码和模板代码,如果你愿意,请提供服务代码健全性检查:在问题中,你将其拼写为projet和project;你在代码的其他部分也犯了同样的错误吗?不,丹。。。我试图在发布代码之前对其进行清理,但似乎我没有做得很好,应用程序运行得很好,除了那行代码不幸的是,当我使用你的代码时,我得到了以下错误:错误:Subproject.queryFalse(…)。那么这不是一个函数。它很奇怪,因为您提供的代码似乎是逻辑的,并且与代码的其余部分同步。