Comments 22
Первые два пункта, скорее, относятся даже не к конкретно AngularJS или javascript'у, а к программированию в принципе.
+5
По второму пункту было бы неплохо привести пример тех самых «не безопасных директив». Скажем если директива использует скоуп и смотрит за ним, то проблем по идее не должно быть.
jsfiddle.net/XAZFr/ — это то что я смог сходу придумать… но буду рад увидеть более адекватные примеры.
jsfiddle.net/XAZFr/ — это то что я смог сходу придумать… но буду рад увидеть более адекватные примеры.
+2
Никакой особенной силы ангуляр не даёт. Он даёт возможность написать статью с пафосным заголовком, в который можно вставить смешную картинку.
-15
И не говорите, все эти языки, фреймворки, инструменты…
Почему нельзя по старинке дырочки в бумажке делать?
Почему нельзя по старинке дырочки в бумажке делать?
+9
Самое смешное то, что все эти клоуны, которые считали что ангуляром можно пользоваться, сейчас пользуют реакт. Но минусы свои не заберут, ггг. Русское IT такое русское.
-1
Только недавно была статья про использование директивы Ace, так опять пишут про основы JS и часть документации про изолированные скоупы. К сожалению, самое интересное в посте — картинка. А жаль.
+2
Проблема мэйнстрим-технологий: слишком много шума вокруг, слишком мало людей реально читают документацию. Можете просто посмотреть на количество тупых вопросов связанных с AngularJS которых по хорошему не должно возникать, если человек на нормальном уровне знает JS и хотя бы немного поразбирался с инструментом который использует. Но без развернутого описания, с чем такое поведение связано, ценность статьи снижается.
+1
Вообще, при работе с формой, не следует отправлять на сервер объект, связанный с полями формы. Стоит отправить его копию. Простой пример:
В форме используется ресурс
делаете
и поля формы внезапно очищаются.
Чтобы этого не происходило нужно отделять друг от друга объект формы и ресурса
В форме используется ресурс
user: {
email: a@a.ru,
password: 123
}
делаете
user.$save()
, получаете в ответ что-то вроде {data: true}
(мало ли что может вернуть бэкенд), user
становитсяuser: {
data: true
}
и поля формы внезапно очищаются.
Чтобы этого не происходило нужно отделять друг от друга объект формы и ресурса
0
а если бэкенд изменяет свойства объекта? например, форматирует текст, приводит номер телефона в нужный формат, вставляет айдишники (мало ли что может делать бэкенд). Тогда нужно опять вручную прокидывать изменения в модель?..
0
Вообще имеет смысл использовать нормальные объекты для хранения данных внутри приложения. То есть у нас есть объект Mymodel, который умеет из данных приходящих с сервера формировать данные для нашего приложения, у нас есть метод serializer/marshal/toJSON, который подготавливает данные для отправки на сервер.
Для своих проектов коллега реализовал небольшой враппер для моделей и коллекций оных по аналогии с backbone. Сейчас обкатываем на проекте.
Для своих проектов коллега реализовал небольшой враппер для моделей и коллекций оных по аналогии с backbone. Сейчас обкатываем на проекте.
0
Странно, конечно. Но если на бэкенде такая логика, то будет одна модель, да.
0
В Angular 1.2 появились alias для контроллеров.
Пример использования jsfiddle.net/5UW2X/
Используя alias, аргумент $scope для контроллера становится не обязательным, но в дочерних контроллерах, что бы получить доступ родительскому контроллеру необходимо обратиться через $scope.[aliasName].some
P.S. $scope.$watch возращает функцию, при вызове которой слежение прекратиться
<div ng-controller="StoreController as store">{{store.name}}</div>
app.controller('StoreController', function() {
this.name = 'this.name';
});
Пример использования jsfiddle.net/5UW2X/
Используя alias, аргумент $scope для контроллера становится не обязательным, но в дочерних контроллерах, что бы получить доступ родительскому контроллеру необходимо обратиться через $scope.[aliasName].some
P.S. $scope.$watch возращает функцию, при вызове которой слежение прекратиться
var unwatch = $scope.$watch("some", function () {
//only one time callback
unwatch();
});
+1
Вторая проблема, как и третья, решаются одинаково: $scope — это не модель, а контейнер моделей. Столько копий уже об это сломано.
Так что ваш пример, хоть и корректен, но является плохой практикой.
Если есть необходимость обнулять массив, то это сигнал, что он должен быть свойством другого объекта (модели)
$scope.model.array
Раньше еще часто замечали, что в ng-model должна быть минимум одна точка, тогда никогда не словите эту проблему и не будете иметь геморроя с хаками вроде array.length = 0…
По опыту: рано или поздно, если нарушать это правило, проблему не только словите, но и пропустите в продакшн, не заметив где-нибудь, и вот тогда уже перестаните это делать.
Так что ваш пример, хоть и корректен, но является плохой практикой.
Если есть необходимость обнулять массив, то это сигнал, что он должен быть свойством другого объекта (модели)
$scope.model.array
Раньше еще часто замечали, что в ng-model должна быть минимум одна точка, тогда никогда не словите эту проблему и не будете иметь геморроя с хаками вроде array.length = 0…
По опыту: рано или поздно, если нарушать это правило, проблему не только словите, но и пропустите в продакшн, не заметив где-нибудь, и вот тогда уже перестаните это делать.
+1
Например, как в этом видео www.youtube.com/watch?v=DTx23w4z6Kc (кстати очень советую остальные видео из этого курса, лучшего введения в Angular я еще не видел).
0
Я вообще-то пользуюсь точкой обычно, но чисто ради интереса — а как очистить объект?
0
По первому пункту: зачем вообще нужна var emptyObject = {...}? Почему не переместить код инициализации пустого объекта в тело createEmptyEntity() и избавиться от необходимости что-то копировать и помнить об этом?
0
По второму пункту — если не нужна цепочка прототипов можно сделать так:
angular.copy($scope.myObj, newObj);
0
Sign up to leave a comment.
С большой силой приходит и большая ответственность — техника безопасности в AngularJS