@angular2Эта группа больше не существует

Страница 119 из 179
Alexey
29.12.2016
08:15:37
и наоборот, внутри SegmentsModule не знает ничего про Oauth, о том что нужно все запросы в API делать передавая access_token, следить за экспирацией и т.д

он просто работает с Http, а AppModule уже глобально позаботился о подмене Http на нашу реализацию Oauth2Http

вот это я называю слабая связаность

Andrey
29.12.2016
08:17:04
в твоем коде все нормально, только остались вопросы, какой код все таки в segmets.module

Google
Alexey
29.12.2016
08:17:55
import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' import { FormsModule } from '@angular/forms' import { ModalModule, ToggleModule, DateTimePickerModule, SelectModule, SwitchModule, ChartModule } from '@cleverdata/dmpkit/ng2' import { SegmentService, StateColorPipe } from './shared' import { SharedModule } from '../shared' import { SegmentsListComponent } from './segments-list' import { SegmentNewComponent } from './segment-new' import { SegmentFormComponent } from './segment-form' import { SegmentRowComponent } from './segment-row' import { SegmentThumbComponent } from './segment-thumb' import { SegmentRulesModule } from '../shared/attributes' import { routes } from './routes' import { SegmentEditComponent } from './segment-edit' import { SegmentStatsComponent } from './segment-stats' @NgModule({ imports: [ CommonModule, FormsModule, ModalModule, ToggleModule, DateTimePickerModule, SelectModule, SharedModule, SwitchModule, ChartModule, SegmentRulesModule, routes ], providers: [ SegmentService ], declarations: [ SegmentsListComponent, SegmentRowComponent, SegmentThumbComponent, SegmentFormComponent, SegmentNewComponent, SegmentEditComponent, StateColorPipe, SegmentStatsComponent ] }) export class SegmentsModule { }

вот такой

роутер import { ModuleWithProviders } from '@angular/core' import { RouterModule } from '@angular/router' import { DeactivateGuard } from '@cleverdata/dmpkit/ng2' import { SegmentsListComponent } from './segments-list' import { SegmentNewComponent } from './segment-new' import { SegmentEditComponent } from './segment-edit' export const routes: ModuleWithProviders = RouterModule.forChild([ { path: '', component: SegmentsListComponent}, { path: 'new', component: SegmentNewComponent, canDeactivate: [DeactivateGuard]}, { path: ':id', children: [ { path: 'edit', component: SegmentEditComponent, canDeactivate: [DeactivateGuard]} ]} ])

заметь что внутри SegmentsModule нет импортов за пределы него, только в ../shared

что логично

в SegmentsModule содержится все для работы с Segments, и все лежит в папке app/segments

http://i.4pcbr.com/i/a0/1CmvWQ.png

Andrey
29.12.2016
08:20:54
с разбиением на бандлы или сегменты все нормально становится и у нас примерно так сейчас и работает все)

Alexey
29.12.2016
08:21:08
это и есть модульность без явных связей

Vadim
29.12.2016
08:21:22
Господа, мой следующий вопрос кому-то покажется очень банальным, тем не менее хорошего решения для него не удалось найти ни в гугле, ни узнать у коллег. Сам же я знаю 2 способа решения данной проблемы, но ни один из них мне не кажется хорошим. Каким образом стоит подключать стили в, например .styl, чтобы не возникало явления "unstyled content flash"? Это когда после подгрузки приложения долю секунды виден html контент, но он не стилизован.

Alexey
29.12.2016
08:23:05
а в Реакте от бедности обычно структурируют все в одну кучу, /components, /services, /utils, /models, /presenters, /stores, /reducers

и это ад

Andrey
29.12.2016
08:23:40
import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' import { FormsModule } from '@angular/forms' import { ModalModule, ToggleModule, DateTimePickerModule, SelectModule, SwitchModule, ChartModule } from '@cleverdata/dmpkit/ng2' import { SegmentService, StateColorPipe } from './shared' import { SharedModule } from '../shared' import { SegmentsListComponent } from './segments-list' import { SegmentNewComponent } from './segment-new' import { SegmentFormComponent } from './segment-form' import { SegmentRowComponent } from './segment-row' import { SegmentThumbComponent } from './segment-thumb' import { SegmentRulesModule } from '../shared/attributes' import { routes } from './routes' import { SegmentEditComponent } from './segment-edit' import { SegmentStatsComponent } from './segment-stats' @NgModule({ imports: [ CommonModule, FormsModule, ModalModule, ToggleModule, DateTimePickerModule, SelectModule, SharedModule, SwitchModule, ChartModule, SegmentRulesModule, routes ], providers: [ SegmentService ], declarations: [ SegmentsListComponent, SegmentRowComponent, SegmentThumbComponent, SegmentFormComponent, SegmentNewComponent, SegmentEditComponent, StateColorPipe, SegmentStatsComponent ] }) export class SegmentsModule { }
А если у нас большой сигмент, который использует большое количество общих компонентов, там кнопки, листы, инпуты и так далее, их обязательно нужно будет все указать здесь?

Google
Alexey
29.12.2016
08:24:06
ты работаешь с каким-то конкретным куском функционала, например с Articles, и бегаешь по проекту в /components/articles/.. в /reducers/articles, models/article ...

Andrey
29.12.2016
08:24:20
Или нужно будет создать декларицию для этого сегмента и там использовать общие компоненты?

Alexey
29.12.2016
08:24:50
нет, там есть SharedModule

из app/shared

все что глобально используется в разных модулях кладем туда

Alexander
29.12.2016
08:25:38
по идее делаешь SharedModule и потом его подключаешь в своих модулях. все эти листы, кнопки будут экспортированы из SharedModule

Alexey
29.12.2016
08:25:55
yep

Alexander
29.12.2016
08:27:29
поэтому когда ты в компоненте из SomeFeatureModule пишешь <my-shared-input> то Angular в какой-то момент смотрит в зависимости SomeFeatureModule, находит там SharedModule и использует из него экспортированные компоненты, пайпы и прочее. в принципе вполне логично все получается

Alexey
29.12.2016
08:28:29
в общем модули это наше все, если сомневаешься то надо просто почитать доку

и примеры как структурировать приложения

и профит будет очевиден

Andrey
29.12.2016
08:29:33
ты работаешь с каким-то конкретным куском функционала, например с Articles, и бегаешь по проекту в /components/articles/.. в /reducers/articles, models/article ...
На самом деле, в реакте это только твой выбор так делать и можно построить приложение по другому и похоже на ангуляр

Alexander
29.12.2016
08:29:35
меня правда бесит писать declarations в модулях, хотя и понимаю, что иначе видимо ангуляр бы и не узнал, что <cool-input> - это CoolInputComponent из файлика cool-input.component.ts

Alexey
29.12.2016
08:30:32
конечно, в первом ангуляре мы просто регистрировали директивы и компоненты сразу в какой-то моуль

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

Andrey
29.12.2016
08:31:07
import CoolInput from './CoolInpun.ts' ?)
но так конечнно начинаются проблемы с dl

Alexander
29.12.2016
08:32:08
import CoolInput from './CoolInpun.ts' ?)
хм. если я так напишу, то в разметке моего компонента можно использовать этот компонент по тегу, который там прописан?

Google
Alexander
29.12.2016
08:32:38
по-моему до модулей нужно было явно прописывать в @Component его зависимости от других компонентов

ага, ок. а то я на секунду испугался :)

Lends
29.12.2016
08:35:35
Знатно вас реактовец затролил))

Alexey
29.12.2016
08:36:41
Igor
29.12.2016
08:55:08
Знатно вас реактовец затролил))
Да я сам пишу на ангуляре. Просто накипело да и попробовал другую технологию.

Lends
29.12.2016
08:57:01
просто доставляет, что всё началось с того, что крайней удобную и крутую фичу принижают, ибо в реакте не так)) "каждый раз в модуле прописывать"... ?

Alexey
29.12.2016
08:57:30
не принижают а не понимают с непривычки

не надо во всем видеть троллинг

Lends
29.12.2016
09:00:52
тогда скучно будет жить)

Igor
29.12.2016
09:28:17
Привет всем, вопрос к тем кто использует ngrx/store, ощутим ли профит от этого подхода? или в итоге дает только лишний оверхед ? Я просто до этого redux не использовал, и пока не могу все цело осознать нужно ли оно, не усложнится ли код от этого

Igor
29.12.2016
09:31:54
меня честно говоря пугает, что в reducer'ах начнут пухнуть switch/case конструкции, и количество reducer'ов тоже не померно будет множится, при это их надо как то складывать рядом, групируя по модулям

Mikhail
29.12.2016
09:34:15
Но у тебя будет связанность данных. Достаточно прочитать про преимущества одного стора

Просто сейчас без swtich/case ты будешь как делать? Создавать новые функции? Дополнительно передавать куччу параметрво в одну функцию? С таким подходом стора у тебя становится атомарный такой подход (если можно так назвать)

Так что попробуй :)

Igor
29.12.2016
09:43:43
А это вообще нормально использовать один экшен в разных редуцерах?

Nikita
29.12.2016
09:56:01
Привет. Подскажите пожалуйста, можно ли передать модель в ParentService? Допустим у меня есть BaseService с таким кодом: @Injectable() export class BaseService { url: string; constructor(public globals: AppService, public http: Http) { } get(): Promise<any> { const url = `${this.globals.apiUrl}/${this.url}/`; return this.http.get(url) .toPromise() .then(res => res.json()) } } В ChildService я наследую BaseService @Injectable() export class ChildService extends BaseService { constructor(public globals: AppService, public http: Http) { super(globals, http); this.url = 'works'; } } Вот тут я хотел бы передать модель, что бы использовать ее в обещании вместо any или это лишнее и можно обойтись указанием типа в компоненте, который использует метод гет?

Igor
29.12.2016
10:04:01
Сделай генерик

@Injectable() export class BaseService<T> { url: string; constructor(public globals: AppService, public http: Http) { } get(): Promise<T> { const url = `${this.globals.apiUrl}/${this.url}/`; return this.http.get(url) .toPromise() .then(res => res.json()) } }

Потом когда чайл будешь инжектить, просто тип укажи: construct(private childService: ChildService<MyModel>) {}

Google
Igor
29.12.2016
10:06:53
https://www.typescriptlang.org/docs/handbook/generics.html

Gleb
29.12.2016
10:08:45
хм вот недавно доклад был

ща в закладках пороюсь

там про ООП Store

без свитч кейс тоже упонималось

Igor
29.12.2016
10:09:29
я сделал без свитчкейсов, я в экшены засунул код о_О

Gleb
29.12.2016
10:09:30
https://www.youtube.com/watch?v=wi3wPzReKZQ

Igor
29.12.2016
10:10:12
спасибо, гляну

Gleb
29.12.2016
10:10:25
https://vsavkin.com/managing-state-in-angular-2-applications-caf78d123d02#.gnu1z0gck

вот еще

ниже код

вернее ссылка на гтитхаб

https://github.com/corasla/angular2-tackling-state-rxjs

вот кароч

другое дело что там самого ngrx нет

ну то есть там просто самоСтор

но разницы особой нет

Скажите пожалуйста я чтот найти не могу, как вернуть в rx массивом обзервы?

Gleb
29.12.2016
10:13:56
ну что то вроде $q.all в первом и с промисами

Google
Gleb
29.12.2016
10:14:06
только в rx и с обзервами

Gleb
29.12.2016
10:20:17
такс нукась

Ну вообще да но вот в этом контексте как бы применить @Effect() removeLayerWithMetadata$: Observable<Action> = this.actions$ .ofType(layers.ActionTypes.REMOVE_LAYER_WITH_METADATA) .map((action: layers.RemoveLayerWithMetadata) => action.payload) .mergeMap(layerWithMetadata => this.mapApi.mapDeleteById(layerWithMetadata.layer.id)) СЮДА БЫ ЕЩЕ ОДИН ЗАПРОС добавить

Gleb
29.12.2016
10:27:03
нее я имею ввиду на ровне с this.mapApi.mapDeleteById хочу добавить еще this.metadataApi.mapDeleteById

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

marat
29.12.2016
10:29:34
можно так попробовать .mergeMap(layerWithMetadata => Rx.Observable.forkJoin(this.mapApi.mapDeleteById(...), this.metadataApi.mapDeleteById(...)) )

только результатом будет не Observable<Action>, а Observable<Array<Action»

Gleb
29.12.2016
10:31:17
Да гуд! @malborov Спасибо!

marat
29.12.2016
10:31:27
пожалуйста

Anton
29.12.2016
11:10:55
Ребят,такой вопрос

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

и вот вопрос в том,как измерять скорость

чтобы он понимал когда надо повышать качество,а когда понижать

Alexander
29.12.2016
11:17:56
можно попробовать при старте кидать обращение на какой-то твой хэндлер, который отдает 10К данных без gzip и прочих радостей. замерять время и на этом основании делать выводы о качестве интернета

время замеряешь между отправкой запроса и получанием этих всех тестовых данных

костылище конечно, но другого способа пока не приходит в голову, который не связан с изменением/внедрением в раздающий веб-сервер

Anton
29.12.2016
11:22:47
окей,спасибо,попробую

Igor
29.12.2016
11:23:01
смотри просто на буфер

если буферизазция идет медленно, переключай на более низкое качество

Страница 119 из 179

Эта группа больше не существует Эта группа больше не существует