【问题标题】:LoopBack AngularJS extending User modelLoopBack AngularJS 扩展用户模型
【发布时间】:2015-04-05 14:31:42
【问题描述】:

在我的 AngularJS 应用程序中使用扩展用户模型时遇到了一些问题。

这是我的 user.json:

{
  "name": "user",
  "base": "User",
  "strict": false,
  "idInjection": true,
  "properties": {
    "clientType": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW"
    }
  ],
  "methods": []
}

这是我的 model-config.json:

{
  "_meta": {
    "sources": [
      "loopback/common/models",
      "loopback/server/models",
      "../common/models",
      "./models"
    ]
  },
  "User": {
    "dataSource": "mongo"
  },
  "AccessToken": {
    "dataSource": "mongo",
    "public": false
  },
  "ACL": {
    "dataSource": "mongo",
    "public": false
  },
  "RoleMapping": {
    "dataSource": "mongo",
    "public": false
  },
  "Role": {
    "dataSource": "mongo",
    "public": false
  },
  "Store": {
    "dataSource": "mongo",
    "public": true
  },
  "user": {
    "dataSource": "mongo",
    "public": true
  }
}

这是我的 UserCtrl.js

angular.module('app.controllers.user', [])

    .controller('UserCtrl', ['user', function (user) {

        var vm = this;

        vm.addUser = function () {
            user.create({
                firstName: vm.firstName,
                lastName: vm.lastName,
                email: vm.email,
                password: vm.password,
                userType: 'customer'
            })
                .$promise
                .then(function (c) {
                    console.log('added user: ' + c.email);
                });
        };
    }])

我收到以下错误:

错误:[$injector:unpr] 未知提供者:userProvider

如果我使用 'User' 而不是 'user' 它可以工作,但它不会使用我的扩展用户模型和指定的 ACL(为所有人阅读)

我了解到您可以指定 var myUser = app.model.user 以确保 LoopBack 使用扩展模型。但我不知道如何在 AngularJS 中做到这一点,因为我在控制器中将模型指定为函数参数..

你能告诉我如何在我的 AngularJS 应用程序中使用我的扩展用户模型吗?

提前致谢!!

【问题讨论】:

    标签: angularjs loopbackjs strongloop


    【解决方案1】:

    您的用户模型是否在 Angular 客户端库中生成?如果您的应用程序在您使用环回自动生成的“用户”模型时工作,那么我最好的猜测是您在最初生成角度服务之后创建了扩展模型“用户”。如果您不使用 grunt 任务,那么您应该重新生成 Angular 服务以使用自上次生成文件以来添加的所有更改和新模型更新文件。

    使用 lb-ng 命令来完成。正如文档所建议的那样

    例如,如果您的应用程序具有标准 LoopBack 项目布局,则在 /client 子目录中,输入以下命令:

    $ mkdir js
    $ lb-ng ../server/server.js js/lb-services.js
    

    您可以在以下链接中找到更多信息 http://docs.strongloop.com/display/public/LB/AngularJS+JavaScript+SDK

    【讨论】:

    • 谢谢。我一直这样做。我认为问题在于,来自 LoopBack 的 AngularJS SDK 总是以大写首字母注入模型。如果我创建一个名为“客户”的模型,则必须将其与“客户”一起注入到控制器功能中才能使用它。现有的基本模型“用户”已经采用该格式。所以我的扩展用户模型“用户”不能注入“用户”,因为那已经是基本模型的名称。一定有办法区分它们
    • 我不确定,但如果是这种情况,那么只需将您的“用户”模型重命名为其他名称,例如自定义用户。无论如何,只用大写字母区分类/模型并不是一个好习惯。
    • 网络中的许多示例只是说“嘿,只需使用您的自定义模型扩展 User 模型并将其命名为 'user'”.. 这甚至在 LoopBack 文档中都有说明。整个 api 都建立在该名称之上。所以如果我使用“CustomUser”,我将不得不在我的应用程序中“接受它”。但我只想使用“用户”。最后:必须有一个解决方案:)
    • @uNki,我遇到了和你一样的问题,你是怎么解决的?
    【解决方案2】:

    您需要定义一个名为“用户”的服务、工厂、提供者、值或常量,以便该服务可以在您的控制器中注入。我在你的帖子中没有看到这些。

    我的建议是,如果您的扩展用户模型是一个类的实例,那么使用服务:

    app.service('user', fn);
    

    如果您的扩展用户模型是 JSON 格式的对象字面量,则使用工厂:

    app.factory('user', function() { return { ... }; });
    

    【讨论】:

    • 谢谢。您的答案与 LoopBack 相关吗?我真的不知道如何在 LoopBack 上下文中解释您的答案。如果我在控制器函数中注入“用户”,它就可以工作,因为 LoopBack 可以开箱即用。它只是不适用于我的扩展用户模型“用户”
    • 我的回答是 angularjs 相关的。错误消息告诉您它找不到要注入控制器的服务。
    • 是的,我明白这一点,但我需要一个与 LoopBack 一起使用的解决方案,因为这是所有业务逻辑和杂乱无章的事情发生的地方。我不需要编写服务等来与后端通信。这就是 LoopBack 所做的。必须有一个简单的解决方案才能使用扩展的用户模型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2016-10-12
    • 2011-02-28
    相关资源
    最近更新 更多