当前位置: 首页 > 面试题库 >

角度js模型关系

潘胤
2023-03-14
问题内容

在过去的几天里,我一直在尝试Angular JS,但我不知道的一件事是如何处理模型之间的关系。

我正在处理的项目有一个用户模型和一个帐户模型。我在数据库上设置了每个帐户都有一个名为“ ownBy”的字段,该字段是对拥有该帐户的用户ID的外键引用。

在Angular中,我在名为main.js的文件中进行了以下设置

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

var Users = myApp.factory('Users', function($resource) {
    var User = $resource('http://api.mydomain.ca/users/:id',
        {id:'@id'},
    {});
    return User;
});

var Accounts = myApp.factory('Accounts', function($resource) {
    var Accounts = $resource('http://api.mydomain.ca/accounts/:id',
        {id:'@id'},
    {});
    return Accounts;
});


function UsersCtrl($scope, Users) {
    $scope.users = Users.query();
}

function AccountsCtrl($scope, Accounts) {
    $scope.accounts = Accounts.query();
}

和以下模板

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title>Angular Test</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css?v=2.2.1">
</head>
<body>
<div ng-app="myApp">
    <div ng-controller="UsersCtrl">
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>First Name</th>
                    <th>Last Name</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="user in users">
                    <td>{{user.id}}</td>
                    <td>{{user.firstName}}</td>
                    <td>{{user.lastName}}</td>
                </tr>
            </tbody>
        </table>
    </div>
    <div ng-controller="AccountsCtrl">
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Owned By</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="account in accounts">
                    <td>{{account.id}}</td>
                    <td>{{account.ownedBy}}</td>
                </tr>
            </tbody>
        </table>
    </div>
</div>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular-resource.min.js"></script>
<script src="/bootstrap/js/bootstrap.min.js?v=2.2.1"></script>
<script src="js/main.js"></script>
</body>
</html>

这正在工作。它从我的REST服务器中提取JSON资源,并将其显示在表中。我需要采取的下一步工作是最终得到一张显示用户及其帐号的表格?(等同于数据库JOIN?)对于一对多关系,是否有其他方法可以实现?(即…一个帐户有很多交易)

谢谢您的帮助 :)


问题答案:

$resource不包含任何处理服务器未处理的关系的方法,但是使用$http以下命令非常简单:

module.factory( 'UserService', function ( $http, $q ) {
  return {
    get: function getUser( id ) {
      // We create our own promise to return
      var deferred = $q.defer();

      $http.get('/users/'+id).then( function ( user ) {
        $http.get('/accounts/'+user.id).then( function ( acct ) {

          // Add the account info however you want
          user.account = acct;

          // resolve the promise
          deferred.resolve( user );

        }, function getAcctError() { deferred.reject(); } );
      }, function getUserError() { deferred.reject(); } );

      return deferred.promise;
    }
  };
});

然后在您的控制器中,您可以像使用其他承诺一样使用它:

UserService.get( $scope.userId ).then( function ( user ) {
  $scope.user = user;
});

它可用于您的模板!

<div>
    User: "{{user.firstName}} {{user.lastName}}" with Acct ID "{{user.acct.id}}".
</div>


 类似资料:
  • 我试图用量角器模拟我网站上的用户故事。 用户必须输入使用自动完成的输入。在现实生活中,用户必须在输入中键入一些文本,然后用鼠标或更自然的向下键选择正确的命题。 问题是我似乎不能用量角器来模拟。element.sendKeys不允许您这样做。我已经尝试了十几种不同的方式,它最多只能产生不可预测的结果。 因此,我想直接根据我的输入操作ng模型。有没有办法从量角器访问元素的作用域并在其上调用函数/设置属

  • 假设您有一个表单,其中包含从数据库加载的值。如何初始化ng模型? 例子: 在我的控制器中,$scope。卡最初未定义。除了做这样的事还有别的办法吗?

  • 我正在使用Grails 2.4.4和AngularJS 1.3.15来创建一个简单的应用程序。为了使模板与Grails一起工作,我使用AngularJS模板资产管道插件2.0.7。 我的第一个原型没有使用ngRoute中的任何路由逻辑。现在我想提取不断增长的应用程序的一部分并将它们放在单独的模板中。这几乎可以工作,但我对图像有一个问题。以前我使用这样的结构将图像作为资产加载: 这确实有效,因为整个

  • 定义关联 关联在 Hyperf 模型类中以方法的形式呈现。如同 Hyperf 模型本身,关联也可以作为强大的 查询语句构造器 使用,提供了强大的链式调用和查询功能。例如,我们可以在 role 关联的链式调用中附加一个约束条件: $user->role()->where('level', 1)->get(); 一对一 一对一是最基本的关联关系。例如,一个 User 模型可能关联一个 Role 模型

  • 问题内容: 我有该组件,将css类设置为它有问题。我希望它始终具有“框”类,然后具有由指令“类”参数指定的其他类和一个条件类“迷你”。 从概念上讲,我想要实现的是这样的: 问题在于,当我设置class html属性时,会忽略ng- class属性。如何在不更改控制器的情况下使示例工作?甚至有可能还是应该在控制器中设置类(我希望避免这种情况)? 问题答案: 我需要多个类,其中一个是$ scope派生

  • 我第一次尝试在request angular js中添加customer头,但遇到以下错误 Angular.js:10671错误:在“XMLHttpRequest”上执行“set requestheader”失败:“x-api-key:”不是有效的HTTP标头字段名。 下面是我的代码,在最高的“应用程序”级别: 我做错了什么/错过了什么/不明白什么?我如何将这个头添加到所有(甚至一个)请求中?