ФорумПрограммированиеJavaScriptAngularJS → Angular.js - баги/хаки/прочее

Angular.js - баги/хаки/прочее

  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 4 июня 2014 г. 7:27

    Когда начинаешь делать какое-то более или менее сложное приложение, то начинаешь находить всякие приколы.

    Когда вы вызываете функцию save, или ещё при каких-то загадочных обстоятельствах, angular заносит во все элементы массивов $$hashKey. Поэтому, при незнании этого, иногда можно написать какую-нибудь функцию, работа которой может быть нарушена, к примеру поиск через underscore, когда указывается объект полностью:
    var groupIndex = _.indexOf($scope.groups, _.findWhere($scope.groups, {id:groupId, name:groupName}));

    Я например внутри функции save вызываю функцию $scope.selfClean(), в которую предварительно пишу полную фильтрацию всех данных скопа, которую я также вызываю при загрузке элементов (мало ли что там придет от источника информации). Лично я в $$hashKey вообще не нуждаюсь, поэтому просто вырезаю их с объектов.

    Далее ещё прикол, от JavaScript, пример реализации которого можно найти на стековерфлоу
    Краткая суть: я фильтрую нежелательные элементы в скопе и удаляю их через
    delete $scope.something[index]

    Если я после этого сделаю console.log($scope.something), то увижу что-то вроде
    [{…}, {…}, … {…}, null, null, null]


    Очень простой трюк помогает убрать эти нулы:
    $scope.somethingDoubleBuffer = $scope.something;
    $scope.something = [];
    for (e in $scope.somethingDoubleBuffer) {
    $scope.something.push($scope.somethingDoubleBuffer[e]);
    };
    delete $scope.somethingDoubleBuffer;


    Не знаю как я до этого додумался, просто случайно обнаружил во время тестирования.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 4 июня 2014 г. 8:07, спустя 40 минут 27 секунд

    может я что-то не понимаю, но зачем перебирать весь массив и руцями удалять? Есть же http://javascript.ru/Array/splice
  • Sinkler

    Сообщения: 8096 Репутация: N Группа: в ухо

    Spritz 4 июня 2014 г. 8:15, спустя 8 минут 15 секунд

    угу, в ангуляре именно через splice удаляют

  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 4 июня 2014 г. 8:29, спустя 13 минут 49 секунд

    может я что-то не понимаю, но зачем перебирать весь массив и руцями удалять? Есть же http://javascript.ru/Array/splice

    @Абырвалг, не всегда работает
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 4 июня 2014 г. 8:52, спустя 22 минуты 40 секунд

    конкретнее? когда не работает?
  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 4 июня 2014 г. 8:56, спустя 4 минуты

    Вот сейчас как раз ебусь с ней, могу видео разве что заснять, так не смогу воспроизвести скорее всего
  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 4 июня 2014 г. 9:13, спустя 17 минут 4 секунды

  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 24 августа 2014 г. 13:02, спустя 81 день 3 часа 48 минут

    Так работает: http://jsfiddle.net/h1Lexq4j/
    Так нет: http://jsfiddle.net/3mqx6h7z/
    Не совсем очевидная работа скопов
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 25 августа 2014 г. 1:25, спустя 12 часов 23 минуты 23 секунды

    если должен был алерт вылезти в обоих случаях, то у меня работает и там и там.
    браузер - хром 36.0
    Высокоуровневое абстрактное говно
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 25 августа 2014 г. 6:57, спустя 5 часов 31 минуту 37 секунд

    у меня тоже, проблема не ясна

    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 25 августа 2014 г. 7:14, спустя 17 минут 18 секунд

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

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

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 25 августа 2014 г. 7:57, спустя 43 минуты 10 секунд

    если должен был алерт вылезти в обоих случаях, то у меня работает и там и там.
    браузер - хром 36.0

    @Stasovsky, алерт должен вылететь, и потом еще вылетать при редактировании инпута
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 25 августа 2014 г. 16:41, спустя 8 часов 43 минуты 43 секунды

    В ангуляре ж не рекомендуют вешаться на примитивы.
  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 25 августа 2014 г. 16:54, спустя 13 минут 13 секунд

    Давно не видел чтобы абырвалг что-то писал, приятно что пыха ещё живет)
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 25 августа 2014 г. 17:16, спустя 21 минуту 36 секунд

    @Ivan., да просто понимаешь, чем дольше живу - тем больше каких-то заебов в жизни и все меньше времени свободного. И на пыху тоже мало совсем остается.

    http://habrahabr.ru/post/223529/ вот я вспомнил ту статью, где про примитивы было написано.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!