2015-04-05 112 views
0

我在AngularJS应用程序中使用扩展用户模型时遇到了一些问题。LoopBack 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": [] 
} 

这里是我的模型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); 
       }); 
     }; 
    }]) 

我是得到以下错误:

错误:[$注射器:unpr]未知提供商:userProvider < - 用户< - UserCtrl

如果我使用 '用户' 而不是 '用户' 它的工作原理,但它不使用我的扩展用户模型与指定的ACL(读所有人)

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

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

在此先感谢!

回答

-3

您需要定义一个名为'user'的服务,工厂,提供者,值或常量,以便服务可以在您的控制器中注入。我在你的文章中没有看到这些内容。

我的建议是,如果你的扩展用户模型是一个类的实例,然后使用一个服务:

app.service('user', fn); 

如果您的扩展用户模型是文字对象JSON格式,然后用一个工厂:

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

感谢您的详细信息。你的回答是LoopBack相关的吗?我真的不知道如何在LoopBack上下文中解释你的答案。如果我在控制器功能中注入'用户',它会起作用,因为LoopBack使得开箱即可。它只是不适用于我的扩展用户模型'用户' – uNki 2015-04-05 14:49:21

+0

我的答案是与angularjs相关的。该错误消息告诉你它找不到要注入到控制器的服务。 – user3890194 2015-04-05 14:53:15

+0

是的,我明白,但我需要一个与LoopBack一起工作的解决方案,因为这是所有业务逻辑和糟糕事情发生的地方。我不需要编写服务等来与后端进行通信。这就是LoopBack的功能。必须有一个简单的解决方案来使用扩展的用户模型 – uNki 2015-04-05 14:54:51

0

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

使用lb-ng命令来做到这一点。由于文档建议

For example, if your application has the standard LoopBack project layout, then in the /client sub-directory, enter these commands:

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

您可以找到以下链接 http://docs.strongloop.com/display/public/LB/AngularJS+JavaScript+SDK

+0

谢谢。我一直这样做。我认为问题是,LoopBack的AngularJS SDK总是以大写字母注入模型。如果我创建一个名为'customer'的模型,它必须将它注入'Customer'到控制器函数中以使用它。现有的基础模型“用户”已经是这种格式。所以我的扩展用户模型'用户'不能注入'用户',因为那已经是基础模型的名称。必须有办法区分他们 – uNki 2015-04-05 21:18:12

+0

我不确定,但如果是这种情况,那么只需将您的“用户”模型重命名为其他内容即可。 CustomUser。无论如何,只有通过大写字母来区分班级/模特并不是一个好习惯。 – 2015-04-05 21:45:01

+0

网络中的很多例子只是说“嘿,只是用你的自定义模型扩展用户模型,并将它命名为'用户'”......甚至在LoopBack文档中也有说明。整个API是建立在该名称的基础之上的。所以如果我使用'CustomUser',我将不得不在我的应用程序中“与之共存”。但我只想使用“用户”。最后:必须有一个解决方案:) – uNki 2015-04-05 21:58:53