Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В реальной жизни оставлять шаблоны чистыми не получится. Логика все равно будет, если у вас что-то серьезнее Hello World.
Идея собственного языка для первого Ангуляра была ужасной.
Кстати, выражение «бороться с фреймворком» я первый раз узнал именно читая о первом ангуляре.
Не холивара ради, знаете Реакт? Там можно писать на JS в любом месте шаблона. И почему-то это не мешает, а только упрощает жизнь.
Имею ввиду все эти ng-директивы: циклы, условия и пр.
В Ангуляре 1, мне кажется, очень неудобно связывать между собой директивы, расположенные «на одном уровне», т.е. не вложенные. Может подскажете как вы такие проблемы решаете? Только без событий в $rootScope.
Вообще так и делал, но показалось не слишком удобно, особенно когда нужно не просто разделить данные, а реагировать на их изменение.
А если на самом нижнем уровне я нажал кнопку и нужно изменить данные, у вас что происходит?
$scope где-то кроме link директив. ну и "ивенты" ангуляра — это ивенты ангуляра, нечего нам их самим слать.ну и "ивенты" ангуляра — это ивенты ангуляра, нечего нам их самим слать
Я же просто бью по рукам всякий раз как вижу $scope где-то кроме link директив
$rootScope.$broadcast и соответственно ловятся через $scope.$on. Как следовало сделать вместо этого? (меня пока напрягает только необходимость тащить $scope в фабрики внутри контроллеров которые обрабатывают эти сообщения).нет смысла тащить еще одну либу которая будет делать тоже самое что и сам angular.
все сообщения из websocket-а распространяются через $rootScope.$broadcast
Система ивентов в ангуляре
$scope автоматически хоронит все связанные обработчики — как без этого можно обойтись в большом приложении я не знаю (удалять их вручную как раз и есть дурной тон) — это основная причина почему у меня все сделано именно так кривовато.У меня к примеру по пушам из сокетов просто вызывается нужный хэндлер
$broadcast только с необходимостью ручного удаления обработчиков (что без деструкторов в js совсем печально).что без деструкторов в js совсем печально
как без этого можно обойтись в большом приложении я не знаю
$scope. Вообще. И тогда жить с ангуляром становится в разы приятнее.Хотим уменьшить количество мест где надо править код.
но не жизнеспособно в боевых условиях.
Не зря же разрабы добавили некоторую поддержку логики
инлайновые функции в темплейтах
Прежде чем хвататься за Angular 2 я попробовала сделать минимальные примеры на React, Ember, Backbone, VueJs, Angular1.4 и даже Aurelia потестила. Решала ту же задачу, которая здесь описана в статье.

Двусторонее связывание проще и удобнее, односторонее «правильнее» и может давать преимущество в сложных проектах.
{{:: foo }}. А one-way data flow — это архитектурное решение.Костыль для скорости — это one-time binding в первом ангуляре, который {{:: foo }}. А one-way data flow — это архитектурное решение.
Насколько я понимаю абстрактная проблема с двусторонним связыванием та же, что и с глобальными переменными. Есть у вас какая-то переменная в VM которая связана с несколькими элементами UI и может меняться с сервера, допустим. И вот эти элементы и сервер одновременно её меняют, как это разрулить? А никак, т.к. логика связывания неявно зашита где-то в глубинах фреймворка.
И вот эти элементы и сервер одновременно её меняют, как это разрулить?
многие моменты не раскрыты и приходится лезть в исходники, чтобы почитать комментарии.
Когда я начинала проект меня волновал вопрос взаимодействия этих товарищей в плане роутинга. А именно, если грузить Angular в папку public, то у меня лично возникли проблемы с роутингом. Так как у Laravel свой роутинг, который с роутингом Angular у меня вообще никак не совпадал, а манипуляции c отдачей нужных роутов не привели к нужному результату. При возврате через браузер на предыдущую страницу мне постоянно выбрасывалась laravelевская страница с ошибкой. Убив пару часов, чтобы подружить этих товарищей я приняла решение разнести по разным доменам api(бэкенд) и фронтенд. Как по мне, так в случае замены одной или другой части целого я не буду зависеть от незаменяемой части.
Так, что, условно сейчас я имею два проекта. Один, условно, крутится на домене: api.proect.dev, а второй на: proect.dev
Так как я все-таки заявила в заголовке, про порог вхождения именно в Angular, то я не буду подробно останавливаться на API.
import Ember from 'ember';
export default Ember.Route.extend({
model: function (params)
{
return Ember.RSVP.hash({
child: this.store.createRecord('child'),
parent: this.modelFor('parentRouteName');
});
},
resetController: function (controller, isExiting, transition) {
if (isExiting) {
controller.get('model.child').rollbackAttributes();
}
},
actions: {
save: function(parent, child)
{
let self = this;
child.set('parent', parent);
child.save().then(function () {
self.transitionTo('some.route', child.get('id'));
});
}
}
});{{input type='text' value='model.child.parameter'}}setupController(controller, models) {
controller.setProperties(models);
}model. в шаблонах (deprecated)input использовать согласно DDAU (ох уж эти любители акронимов) и с <> скобкамиrollbackAttributes пока что не умеет работать с belongsTo / hasManydeprecated, но при этом замены пока нет.model, так что имеет смысл уже не писать через него, а делать напрямую через setupController, который тоже должен уйти.model. Будет или attrs как в React, или что-то подобноеLaracasts как источник обучения весьма грустен. Тейлор там рассматривает все достаточно поверхностно, перескакивая с одного на другое и совершенно не углубляясь. Все по верхам.

некоторой борьбы с роутингом лары и недостижением нужного результата
Так, что сейчас изучаю вопросы о которых раньше думать даже не приходилось :)
Потому что или везде должно быть name или везде id.
Самый банальный по моим прикидкам — sql инъекции и как от них защищаться :)
Мы можем ввести три маршрута на один экшен контроллера и все будет хорошо.
prepared statements, и это не зависит от языка программирования.
Для меня оказалось проще пойти по пути полного погружения в js и изобретения собственного «велосипеда» с блэкджеком и…
prepared statements — вот спасибо за наводку
Я в этом вижу одну из проблем разработчиков. Велосипедостраение и кастылеподпирание.
где бы жестко следовали бы определенным паттернам
задействовано людей больше, чем один — уже будут появляться костыли и велосипедостроение.
TDD и код ревью спасут мир.
Я понимаю почему так происходит, и сейчас начинаю понимать почему это плохая практика :)
Порог вхождения в Angular 2 — теория и практика