2015-11-14 3 views
1

Итак, у меня есть эта фабрика «константы», которая просто предоставляет некоторые константы для использования в шаблонах, моделях и контроллерах. В моих угловых контроллерах я обычно делаю constants.roles.ADMIN нормально. Как это перевести на машинопись?Как преобразовать этот угловой завод в машинопись?

(function() { 
    'use strict';  
    angular.module('App').factory('constants', function(){ 
    return {  
     roles: { 
     ADMIN:'admin', 
     CLIENT:'client', 
     USER:'user' 
     },  
     loginStatus: { 
     LOGGED_OUT: 'loggedOut', 
     LOGGED_IN: 'loggedIn', 
     LOGGING_IN: 'loggingIn', 
     }, 
    };  
    });  
}()); 

Я хочу, чтобы что-то подобное выглядело. Вот моя попытка, но это кажется неправильным. На данный момент, я просто положить его в том же файле TS, как моя модель для тестирования:

class constants { 
     static roles:object { 
     ADMIN:string = 'admin', 
     CLIENT:string = 'client', 
     USER:string = 'user' 
     },  
     loginStatus: { 
     LOGGED_OUT:string = 'loggedOut', 
     LOGGED_IN:string = 'loggedIn', 
     LOGGING_IN:string = 'loggingIn', 
     }, 
    } 

    class UserModel { 
     //obviously this is just an example 

     activeRole:string; 

     isAdmin =() => { 
      return this.activeRole == constants.roles.ADMIN; 
     } 
    } 

, но я не могу перейти к определению и мой подсветка синтаксиса показывает мои статические классы как неиспользуемый декларации.

Я всего лишь TS noob, так что, возможно, я подхожу к этому неправильно. Как мне перевести с моей фабрики на объект ts?

ответ

1

Это должно быть Машинопись версия (playground):

class constants { 
    public static roles = { 
     ADMIN : 'admin', 
     CLIENT : 'client', 
     USER : 'user' 
    }; 
    public static loginStatus = { 
     LOGGED_OUT : 'loggedOut', 
     LOGGED_IN : 'loggedIn', 
     LOGGING_IN : 'loggingIn', 
    }; 
    } 

    class UserModel { 
     //obviously this is just an example 

     activeRole:string; 

     isAdmin =() => { 
      // we need this. to access class member 
      return this.activeRole == constants.roles.ADMIN; 
     } 
    } 

Кроме того, activeRole должны быть доступны с this.

Проверить это here

+0

ах, да, я просто кодировал прямо в окне SO. Круто, что имеет смысл. Если я хочу, чтобы экстернализировать это в свой собственный класс, я бы просто поместил константу класса (я заглавю ее) в файл и имею ссылку на проект root, скажем, app.ts, и он работает, или я должен явно импортировать его из моего UserModel? Наверное, это совсем другой вопрос ... – FlavorScape

0

Вы, очевидно, нужно angular.constant и не завод. Фабрика хороша для случаев, когда вам нужно сделать некоторые вычисления для создания своего объекта или других услуг в качестве инъекций. если вы используете постоянные значения, вы должны обязательно использовать angular.constant, как это:

angular.module('App').constant('constants', {  
     roles: { 
     ADMIN:'admin', 
     CLIENT:'client', 
     USER:'user' 
     },  
     loginStatus: { 
     LOGGED_OUT: 'loggedOut', 
     LOGGED_IN: 'loggedIn', 
     LOGGING_IN: 'loggingIn', 
     }, 
    };  
); 

Другое дело, говоря, что если вам не нужны различные значения для испытаний/разработчика Я хотел бы предложить, что вы должны использовать ES6 константа, и это также поможет обнаружить ошибки типа Type, рефакторинг, в вашей среде IDE будет «понимать» вашу константу.

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