繁体   English   中英

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

[英]AngularJS access object field in controller

所以我得到了这个AngularJS控制器,在这里我需要使用2个不同的服务ProjectSubproject 一个通过project_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_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>

在Firebug中,我可以清楚地看到$ scope.subproject的所有元素,包括project_id

如果你们能给我一个关于这个问题的提示,我将非常感激。

谢谢

可以,因为Subproject服务在那里有一个异步查询。 完成后,它将返回一个承诺。

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_id

以下代码对我有用,并且遵循了康斯坦丁的答案:

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

如您可能会看到$ promise.then为我做窍门。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM