• Как сделать от такое portfolio?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    руками
    UPD: Alexandr Lebedev: Чтобы сделать подобное, необходимо использовать знания HTML-разметки, CSS-стилей и JS (при необходимости).
    Ответ написан
    2 комментария
  • Как записать только то, что нужно в модель?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Здравствуйте. Спасибо и Вас с наступившим.

    Попробуйте в параметрах модели поставить schema: true.
    Ответ написан
    1 комментарий
  • Лучший способ реализации мультиязычности на Node.js?

    HoHsi
    @HoHsi
    Ответ написан
    Комментировать
  • Как сказать html-странице, что не надо читать код с фигурными скобками, пока angular не начал их парсить?

    Denormalization
    @Denormalization
    Специально же в документации есть пункт про это.

    Используйте ng-src вместо src для тега img.
    Ответ написан
    Комментировать
  • А расскажeте про promise и $resource?

    AMar4enko
    @AMar4enko
    Основная идея ресурса в том, что объект, получаемый от сервера (одиночный либо список)
    будет являться "потомком" вашего объекта-ресурса.
    Т.е. можно делать так:
    var Person = $resource(...);
    Person.prototype.fullName = function() { return this.firstName + this.lastName; }
    
    Person.query().$promise
      .then(function(response) {
        return response[0].fullName(); // Прототипом каждого элемента в списке будет Person   
      });


    Промисы нужны для того, чтобы эффективно управлять потоком выполнения асинхронного кода.
    Ответ написан
    Комментировать
  • А расскажeте про promise и $resource?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Первое — чтобы преобразовать ангуларовский объект (в котором есть всякие одно- и двудолларовые параметры, все эти $xxx и $$xxx) в нормальный (т.н. raw json) нужно использовать стандартные ангуларовские методы из коробки:
    angular.fromJson(response)
    и
    angular.toJson(response)

    Просто поковыряйте эти функции и посмотрите, что они вернут.

    По поводу промисов. Когда вы вызываете какой-либо $resource-метод, например, .query(), то вам сразу же, моментально, возвращается объект с двумя параметрами — $promise и $resolved: false. После того, как ресурс получил данные, в ваш объект с двумя параметрами добавляется ещё куча данных (ну, json-данные, что вам вернул сервер), а параметр $resolved становится true.

    Так вот $promise нужен тогда, когда после загрузки данных вам нужно что-то сделать :) Ведь когда вы послали запрос, вы не знаете, когда придет ответ, а $promise знает и позволяет вам что-нибудь сделать именно после загрузки. Обращаться к промису нужно так:
    vm.data = dataService.getData().$promise.then(success, error);
    
    function success(resource) {
        // тут не данные в resource, а объект $resource с данными, тут можно почистить его через angular.fromJson и т.п.
    }

    Тут, после получения данных, ваш vm.data сразу же пополняется данными ответа (и вы там что-то выводите через ng-repeat — Ангулар там сам понимает, что выводить нужно только ваши данные, и не выводит еще два параметра $promise и $resolved, хотя они в объекте присутствуют, как вы уже в console.log вывели и убедились), а в функции success можно еще что-нибудь сделать.

    Можно так же сразу и не присваивать vm.data ничего, а сначала сделать какие-то действия в success и только потом присвоить, вот так:
    dataService.getData().$promise.then(success, error);
    
    function success(resource) {
        // тут не данные в resource, а объект $resource с данными, тут можно почистить его через angular.fromJson и т.п.
        // сначала что-нибудь делаем с полученными данными, а потом присваиваем их в скоуп
        vm.data = transformMyData(resource);
    }
    Ответ написан
    4 комментария
  • А расскажeте про promise и $resource?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    прочитайте нормальную стратью про промисы
    Ответ написан
    4 комментария
  • Мультиязычность в Yii2: как реализовать правила URL?

    Я использую сдедующий подход:
    1) В базе данных информация о страницах (или товарах, или других сущностях) хранится в двух таблицах: например, page и page_content. Первая таблица - это данные, которые не требуют перевода (например id, дата создания, дата обновления, слаг итд.). Вторая таблица - это текстовые данные, которые будут мультиязычными (meta_title, meta_description, meta_keywords, content). Во второй таблице (с контентом), должно быть поле для связи с первой таблицой (напр. поле page_id), а также поле для указания кода языка. Получается, что для одной записи в первой таблице существует несколько записей во второй таблице, каждая из которых - на разных языках.
    2) В моделях нужно прописать связь один к одному для этих таблиц, в которых связующими будут поля по ID и по полю языка (параметр берётся из настроек приложения Yii::$app->language):
    public function getPageContent()
    {
        return $this->hasOne(PageContent::className(), ['page_id' => 'id'])->andWhere(['page_content.language_code' => Yii::$app->language]);
    }

    Теперь при выборке данных из первой таблицы, будут подтягиваться тексты из второй таблицы, на текущем языке приложения.
    3) Для управления текущим языком приложения и удобного переключения с одного языка на другой (параметр языка хранится в ссылке), существует замечательный компонент Yii2 Locale URLs
    Ответ написан
    1 комментарий
  • Почему может не работать pageTitle?

    miraage
    @miraage
    Старый прогер
    <html .... data-ng-controller="MainController as ctrl">
    <title ng-bind="ctrl.title"></title>


    https://docs.angularjs.org/api/ng/directive/ngCont...

    // UPD

    Ах, видать у Вы еще незнакомы с примитивами в JS. Они передаются по значению, а не по ссылке.

    Я бы на Вашем месте сделал так:

    angular.module('app', [])
    
    .service('PageTitle', function() {
      this.title = 'default';
      
      this.setTitle = function (title) {
        this.title = title;
      };
      
      this.getTitle = function () {
        return this.title;
      };
    })
    
    .controller('MainCtrl', function(PageTitle) {
      PageTitle.setTitle('Foo Bar');
    })
    
    .directive('title', function (PageTitle) {
      return {
        restrict: 'E',
        link: link
      };
      
      function link($scope, $el) {
        $scope.$watch(watchFn, updateFn);
        
        function watchFn() {
          return PageTitle.getTitle();
        }
        
        function updateFn(title) {
          $el.html(title);
        }
      }
    });
    Ответ написан
    1 комментарий
  • Что такое "отказ от двустороннего датабиндинга"?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    есть датабиндинг, observable отношение между одним компонентом и другим. Например:

    var model = {
        title: 'Some Title'
    };
    
    function view(container) {
        var el = container.querySelector('[data-bind="title"]');
        // следим за изменениями
        Object.observe(model, (changes) => {
            if ('title' === changes.name) {
                // обновляем при изменении связанное значение у другого компонента
                el.innerHtml = model.title;
            }
        }, ['update'])
    }


    В этом случае если каким-то чудом наш элемент вдруг поменяет содержимое (ну а вдруг?) то значение внутри модели не поменяется, оно не зависит от другого компонента.

    В случае же с двусторонним датабиндингом изменения происходят с двух сторон. Грубо говоря с двух сторон стоят обзерверы которые меняют значения. И это говорит нам о том что изменения, поток данных, идут в обе стороны, потому этот вид биндингов называется двусторонним.

    Сами по себе биндинги это круто, и это то что делает современные фреймворки такими крутыми - позволяют реагировать на изменение данных и обновлять к примеру view приложения, без необходимости писать огромные куски кода отслеживающие изменения - все за нас делает фреймворк.

    Проблема с двусторонним дата биндингом очень простая - систему построенную с активным применением двустороннего биндинга крайне тежело отлаживать. Приведу простой пример. Предположим что у нас есть компонент A и компонент B. У компонента A есть свойство foo которое содержит какую-то строку, компонент B содержит свойство bar и у нас установлено двустороннее связывание между этими двумя свойствами.

    Фреймворк гарантирует нам то, что если одно из этих полей поменяется, он поменяет другое, так что A.foo всегда будет равно B.bar. Вот только это создает такую проблему, теперь оба компонента должны учитывать что значение foo и bar могут поменяться в любой момент, и не понятно кто инициировал изменения. Спокойно можно войти в состояние когда A меняет состояние, B синхронизируется и реагирует и снова меняет состояние, тогда реагирует A, и может быть появляется какие-то другие связанные компоненты. То есть мы можем быстро и просто схватить рекурсию. Если у вас на этой основе построена бизнес логика - то вам будет крайне сложно потом поддерживать эту систему, дебажить ее ад.

    Грубо говоря помимо того что дебажить эту систему становится тяжело, у нас появляется неявная зависимость между A и B, им нужно знать что они могут поменять друг дружку. А все неявное это не очень хорошо.

    Что можно сделать, можно разложить двустороннюю связь на составляющие. Односторонний биндинг из A в B и навесить ивенты если один из компонентов что-то меняет. В этом случае вы всегда можете поставить бряку и точно будете знать кто что поменял. Поддерживать такую систему куда проще.
    Ответ написан
    7 комментариев
  • Как найти, есть ли элемент в массиве?

    @EvgenZZ
    php, javascript developer
    Underscore. Js underscorejs.ru/#arrays
    Ответ написан
    Комментировать
  • Как найти, есть ли элемент в массиве?

    profesor08
    @profesor08 Куратор тега JavaScript
    Согласно документации angular.forEach, перебор элементов должен выглядеть так для вашего примера.
    angular.forEach(ProductsList, function(value, key) {
    
    }
    Ответ написан
    Комментировать
  • Как найти, есть ли элемент в массиве?

    @Stopy
    Вставляй не в массив, а в другой объект, типо вот так { id: {name: name} }, а проверка на существование в корзине сама собой решится
    Ответ написан
    Комментировать
  • Как найти, есть ли элемент в массиве?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    var ProductsList = [],
          Cart = function (id, name) {
               this.id = id;
               this.name = name;
           }
    ;
    
    function addProduct(id, name) {
          ProductsList.some(function(e){
             return e.id == id;
          })||ProductsList.push(new Cart(id, name));
    }
    Ответ написан
    3 комментария
  • Есть ли "сервис"?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В angular есть понятие сервис для передачи данных между контроллерами

    Оно не для того, он для того что бы запихать туда бизнес логику всю. В целом это просто какие-то объекты которые что-то делают. Фильтры скажем тоже можно как сервисы использовать, как и контроллеры.

    то что вы ищите называется "middleware".

    p.s. почитайте про шаблоны проектирования, solid и т.д.
    Ответ написан
    2 комментария
  • Вы создаете конструкторы форм?

    @djay
    Дописать несколько полей - будет менее затратным по времени и силам способом. А конструктор форм, если применять, то желательно еще с самого начала разработки.

    По поводу конструктора динамических форм, говорят что этот более-менее пригодный: metawidget.org

    И еще один - https://github.com/saymedia/angularjs-dynamic-form
    Ответ написан
    Комментировать
  • Разбивать данные на массив или нет?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    По-моему личному мнению, я бы не менял конфигурацию данных, которые получил от сервера. Лучше два ng-repeat-а. Кто знает, зачем вам в дальнейшем этот массив потребуется, а вы его уже распотрошили. )
    Ответ написан
    2 комментария
  • Как справляется Google с индексацией сайтов на AngularJS и других фреймворках?

    copist
    @copist
    Empower people to give
    Личный опыт работы с prerender habrahabr.ru/post/254213/#comment_8546193 на проекте с 100 000+ страниц.

    Ну и в результате отличная индексация, icons8.com на первой странице выдачи гугла по ключевым, пользователи заходят практически на все из 100 000 страниц из поиска
    Ответ написан
    3 комментария
  • А как подставлять переменную в директиву?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    функция отрабатывает до compile директивы, так что значения еще не интерполированы. Что вы можете сделать, так это воспользоваться директивой ng-include.

    return {
        template: '<ng-include src="templateUrl"></ng-include>',
        scope: {},
        link: function (scope, el, attr) {
            attr.templateUrl.$observe(); // логика изменения переменной.
        }
    }
    Ответ написан
    2 комментария
  • Почему не работает calc?

    @YuraArt
    пробелы поставь
    height: calc(100vh - 50px);
    Ответ написан
    1 комментарий