2015-04-05 2 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 (READ для всех)

Я читал, что вы можете указать var myUser = app.model.user, чтобы убедиться, что LoopBack использует расширенную модель. но я не знаю, как это сделать в AngularJS, поскольку я указываю модель как функциональный параметр в контроллере.

Вы можете рассказать мне, как использовать мою расширенную модель пользователя в моем приложении AngularJS?

заранее!

ответ

-3

Чтобы сервис мог быть введен в ваш контроллер, вам необходимо определить Сервис, Завод, Поставщик, Значение или Постоянный, называемый «пользователь». Я не вижу ни одного из них в вашем посте.

Мое предположение, если расширенная модель пользователь является экземпляром класса, а затем использовать услугу:

app.service('user', fn); 

Если расширенная модель пользователь литерал объекта в формате JSON, а затем использовать завод:

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

спасибо. ваш ответ LoopBack-related? я действительно не знаю, как интерпретировать ваш ответ в контексте LoopBack. если я добавляю «Пользователь» в функцию контроллера, он работает, потому что LoopBack делает это возможным из коробки.он просто не работает с моей расширенной пользовательской моделью пользователя – uNki

+0

Мой ответ связан с угловыми. В сообщении об ошибке сообщается, что он не может найти службу для ввода в ваш контроллер. – user3890194

+0

да, я понимаю это, но мне нужно решение, которое работает с LoopBack, потому что здесь происходит вся бизнес-логика и crud-stuff. Мне не нужно писать службы и т. д., чтобы общаться с бэкэнд. это то, что делает LoopBack. Должно быть простое решение использовать расширенную модель пользователя – uNki

0

У вас есть модель с учетом интересов пользователя? Если ваше приложение работает, когда вы используете автогенерированную «Пользовательскую» модель с петлевой петлей, то лучше всего предположить, что вы создали расширенную модель «пользователь» после того, как вы изначально создали свои угловые сервисы. Если вы не используете задачу 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

. Я делал это все время. я думаю, проблема заключается в том, что SDK от AngularJS от LoopBack всегда вводит модели с первой буквой капитала. если я создаю модель с именем «клиент», ей нужно ввести ее «Customer» в функцию контроллера, чтобы использовать ее. существующая базовая модель «Пользователь» уже находится в этом формате. поэтому моей расширенной пользовательской модели «пользователь» нельзя вводить «Пользователь», потому что это уже имя базовой модели. должен быть способ различать их – uNki

+0

Я не уверен в этом, но если это так, то просто переименуйте свою «пользовательскую» модель на что-то еще, например. CustomUser. В любом случае, это не очень хорошая практика, когда классы/модели отличаются только заглавной буквой. –

+0

многие примеры в сети просто говорят: «Эй, просто расширьте модель пользователя своей пользовательской моделью и назовите ее« пользователем »... это даже указано в документах LoopBack. весь api построен поверх этого имени. поэтому, если я использую «CustomUser», мне придется «жить с ним» в моем приложении. но я просто хочу использовать «пользователь». и, наконец: для этого должно быть решение :) – uNki

Смежные вопросы