• Как передать данные из input в контроллер?

    @mmxdesign
    Software Engineer
    Вообще то ng-model нужно писать в input тэг а не в md-input-container

    пользуйся ng-controller="PostReq as pr" чтобы область видимость была локальной а не глобальной, тогда все переменные с pr.***** будут именно локальны для котроллера PostReq.

    <div layout-gt-sm="row" ng-controller="PostReq as pr">
            <md-input-container flex>
              <label>Name</label>
              <input type="text" ng-model="pr.catName"/>
            </md-input-container>
                <md-input-container flex >
              <label>Color</label>
              <input type="text" ng-model="pr.catColor"/>
            </md-input-container>
                <md-input-container flex >
              <label>Age</label>
              <input type="text" ng-model="pr.catAge"/>
            </md-input-container>
                <md-button class="md-raised md-warn" ng-click="pr.sendReq()">Create cat</md-button>
            </div>


    Данные нет смыслы вкладывать так как они уже в скопе.
    А контроллер должен быть таким:

    app.controller('PostReq', function ($scope, $http) {
        $scope.sendReq = function() {
            alert( $scope.catName);
            var intAge = parseInt($scope.catAge);
            $http({method: 'POST',
            url: 'http://127.0.0.1:8000/api/cat/',
            data: {name: $scope.catName, color: $scope.catColor, age: intAge}
        });
    }});
    Ответ написан
    Комментировать
  • Какой принцип работы встроенного метода в прототипе?

    @mmxdesign
    Software Engineer
    Смысл прототипа - это написать одну функцию и привязать ее к общему типу (типа родителю) и тогда дети (instance) этого родителя могут иметь доступ к общей одной функции.. написал один раз пользуешься везде...

    А касательно реализации hash, это уже чисто на вкус.. я так понял вопрос о прототипах или именно о методе hash?

    1) метод использует метод reduce который проходится по списку ['person', 'history', 'hometown'] и при каждой итерации внутри объект obj именьшается на ту часть по которой ключ совпал...

    1. первый заход: 
    {
      person: {
        name: 'joe',
        history: {
          hometown: 'bratislava',
          bio: {
            funFact: 'I like fishing.'
          }
        }
      }
    
    2. второй заход
    {
    history: {
          hometown: 'bratislava',
          bio: {
            funFact: 'I like fishing.'
          }
    }
    
    3. третий заход
    {
     hometown: 'bratislava',
    }


    Надеюсь смысл понятен?

    2) метод forEach также сперва разбивает строку на список ['person', 'history', 'hometown']
    и проходится с первым ключом и если находит возвращает тот объект (в нашем случаи person, затем history и тд) и на втором заходе уже сравнивает со вторым ключем

    Вся магия происходит в callbackах, то есть каждый раз obj внутри функции уже не тот же obj что вначале функции.. вы можете это легко проверять путем console.log внутри этих функций...
    Ответ написан
  • Как интегрировать сторонние JS библиотеки в Angular JS?

    @mmxdesign
    Software Engineer
    Все очень легко как только вы загружаете, эта библиотека уже доступна как глобальная переменная, и вы можете везде вызвать ее, для этого не нужно ничто импортировать или делать dependency injection... все гораздо проще

    var pdf = new jsPDF('p', 'pt', 'a4');

    и делать что хотите с ней в контролере, директиве или в сервисах разницы нет.
    Ответ написан
    2 комментария
  • Как задать много фильтров по одному ключу в Angulyar?

    @mmxdesign
    Software Engineer
    В таком случаи нужно писать специальный фильтр

    app.filter('filterMaterials', function () {
      return function (materials, wood, plastic) {
         var filteredMaterials = [];
         for (var i = 0; i < materials.length; i++) {
              if (materials[i].type === wood || materials[i].type === plastic) {
              	filteredMaterials.push(materials[i]);
              }
         }
         return filteredMaterials;
      };
    });


    а писать это в html нужно так добавляя друг за другом, как бы piping... таким обзаром можно передать сколько угодно параметров в фильтр... и на фильтре тоже нужно сделать добавления этих параметров..

    <tr data-ng-repeat="material in materials | filterMaterials:search.wood:search.plastic">
           <td>{{material.name}}</td>
           <td>{{material.type}}</td>
           <td>{{material.price}}</td>
      </tr>
    
    <input type="checkbox" data-ng-model='search.wood'/>
    <input type="checkbox" data-ng-model='search.plastic'/>


    Надеюсь вам это поможет понять.
    Ответ написан
  • Как остановить массовое заполнение по клику popover на Angular?

    @mmxdesign
    Software Engineer
    Как и писал ранее, вы не правильно представляете себе директивы. Почему у вас появляются столько окошек? потому что все ваши клики связаны на rootScope и один клик иницирует вызов стольких же клик функций. Вам нужно изолировать каждую ячейку созданием директивы на эту ячейку... считайте что ячейка - это одна самостоятельная функция. так вот директива и есть эта функция, которая знает что делает ячейки в разных обстоятельствах. и тогда вам не нужно городить столько DOM с ng-click
    Ответ написан
    Комментировать
  • Не добавляется директива в html средствами angular. Почему?

    @mmxdesign
    Software Engineer
    По сути вы не правильно добавляете директивы в DOM. Как выше было сказано когда вы динамически добавляете элементы, ангуляр не в курсе что они уже появились в DOM дереве, и нужно использовать $compile чтобы он компилировал дом структуру и привязал элементы к соответствующим директивам.

    Но здесь вы совершаете одну ошибку раньше, тем что вне директивы стараетесь манипулировать DOM структурой.

    Должен добавить такую директиву на класс day-col, тогда тебе не нужно будет искать каждый элемент.
    app.directive ('dayCol', function ($compile) {
        return {
            restrict: 'С',
            link: link
        };
    
        function link(scope, element, attr) {
            element.bind('click', function() {
                var addEvent = $compile('<add-event></add-event>')(scope);
                element.append(addEvent);
            });
        }
    });
    Ответ написан
    Комментировать
  • Как правильно реализовать авторизацию пользователя на сайте?

    @mmxdesign
    Software Engineer
    лучше использовать для авторизации JWT
    Ссылка
    Ответ написан
    Комментировать
  • Как создать Angular-директиву, которая просто вызывает плагин jQuery?

    @mmxdesign
    Software Engineer
    angular.directive('datetime', datetimeDirective);
    
    function datetimeDirective() {
       var directive = {
       	restrict: 'C',
            link: link
       }
    
       return directive;
    
       function link(scope, element, attrs) {
       	element.datepicker();
       }
    }
    Ответ написан
    3 комментария
  • Обновляем сервис из директивы в AngularJS?

    @mmxdesign
    Software Engineer
    1. желательно должно быть так vm.score = scoreService.getScore();
    2 Общие данные лучше хранить в сервисах так как они являются Singleton а значит имеют только одну сущность по всему приложению. И могут быть вызваны из любого места
    3 Лучше в сервисах, rootScope использовать плохой тон и практика
    4 Вот так можно сделать
    scoreService имеет локальную переменную score и два метода getScore и setScore
    Импортируете scoreService в директиву и в функции линк вызываете метод scoreService.setScore() которая увеличивает значение score.
    Импортируете scoreService в контроллер и считываете значение scoreService.getScore()
    Если нужно конкретное решение дайте знать но лучше понять логику чем конкретное решение
    Ответ написан
    Комментировать
  • Делаете ли вы гимнастику для глаз?

    @mmxdesign
    Software Engineer
    Может не в тему, но касательно утомленности глаз, хочу поделиться своим опытом.
    Купил себе очки фирмы Gunnars, реально помогают, глаза меньше устают.
    Gunnars
    А в целом конечно, минимум один раз в час нужно отойти от монитора хотя бы на 5 минут, например кофе или чай себе принести.
    Ответ написан
    6 комментариев
  • Как вместо _id получить объект?

    @mmxdesign
    Software Engineer
    var order = new Order(req.body);
                order.status = mongoose.Types.ObjectId(order.status);
    
               /* здесь вы сами же перезаписываете ваш объект в ID*/
              /* order.client = order.client ? mongoose.Types.ObjectId(order.client) : null; */
            order.client = order.client ? order.client : null;
    Ответ написан
    Комментировать
  • Как вынести route в отдельные файлы и подключить их?

    @mmxdesign
    Software Engineer
    Создайте отдельные файы в папке routes/route1.js, routes/route2.js и тд, дальше и экспортируйте их модули.

    // routes/route1.js
    
    module.exports = [
        { 
          method: 'GET', path: '/routes1', 
          handler: function () {} },
        { 
          method: 'GET', path: '/routes1/{id}', 
          handler: function () {} }
    ];


    далее в папке роутинга создать index.js где соединить все route1.js, route2.js, route3.js......routeN.js и экспортировать их всех в массиве

    //  /routes/index.js
    
    var route1 = require('./route1');
    var route2 = require('./route2');
    var route3 = require('./route3');
    var routeN = require('./routeN');
    
    module.exports = [].concat(route1, route2, route3, routeN);


    а теперь весь этот массив можете вызвать в файле сервере и передать массив из роутеров в сервер.

    //  /server.js
    
    var routes = require('./routes');
    server.route(routes);
    Ответ написан
    1 комментарий
  • Как сделать отчеты по следующему JSON-у?

    @mmxdesign
    Software Engineer
    если предположим что в значение data храниться список ваших данных
    var data = [{
    "_id" : ObjectId("56e6b657753c6d890f614820"),
    "user" : ObjectId("56d9793edf03960106872e76"),
    "status" : ObjectId("56bd55d111b7ed891118a65b"),
    "created" : ISODate("2016-03-14T13:02:15.030Z"),
    "sum" : 20}, ........ ];

    тогда можно использовать функцию Reduce
    data.reduce(function (result, o) {
        var key = o.user;
        var counter = 1;
        if (!(key in result)) {
            result.arr.push(result[key] = { 
                user: o.user,
                couter: counter, 
                total: o.sum
            });
        } else {
            result[key].total += o.sum;
            counter++;
        }
        return result;
    }, { arr: [] }).arr;


    получите результат по полю юзер, и общая сумма и количество закаков
    По водителю, делаете тоже самое просто вместо user используете driver как ключ.
    var key = o.driver;

    Рабочий пример на jsFiddle
    Ответ написан
  • Как пользоваться библиотекой D3 React?

    @mmxdesign
    Software Engineer
    Необходимо заранее назначать переменную где будет список с данными...
    включая ключи "name"и "values" на основе которого будет построен график.

    Update:
    import React, { Component } from 'react';
    
    import { BarChart } from 'react-d3';
    
    export class first extends Component {
    
        constructor(...args) {
            super(...args);
            this.state = {};
        }
    
        render() {
      // необходимо заранее назначить на переменую список с минимальными данными включая  ключи "name"и "values"
        var data = [
        {
        	name: "series1",
        	values: [ { x: 0, y: 20 }, { x: 24, y: 10 } ]
      	},
      	{
        	name: "series2",
        	values: [ { x: 70, y: 82 }, { x: 76, y: 82 } ]
      	}
    	];
            return (
                    <div>
                        <h1>First Chart</h1>
    
                        <BarChart
                                    data={data}
                                    width={500}
                                    height={200}
                                    fill={'#3182bd'}
                        />
                    </div>
            );
        }
    }
    export default first;
    Ответ написан
  • Где искать информацию по replace(/\B(?=(\d{3})+(?!\d))/g, ",")?

    @mmxdesign
    Software Engineer
    Ответ написан
    Комментировать
  • Ошибка "tunneling socket could not be established", как сделать правильно??

    @mmxdesign
    Software Engineer
    попробуйте поменять options на нижеследующее. добавляется strictSSL false, а также в прокси прописывается просто http вместе https.
    Также вопрос дополнительный, вы делаете запрос напрямую или вы в какой нибудь корпоративной сети или за прокси-сервером?

    var options = {
          url: 'https://vk.com',
          proxy: 'http://login:password@XXX.XXX.XXX.XXX:YYYY',
          method: 'POST',
          headers: headers,
          strictSSL: false
    };
    Ответ написан
    2 комментария
  • Как сделать автоматический перенос слов в тексте, на сайте?

    @mmxdesign
    Software Engineer
    Чтобы получить "-" при переносе слов используйте библиотеку
    Hypernator там все просто подключаете js, указываете класс в параграфе class="hyphenate"
    Ответ написан
  • Как сделать мульти таблицу или триггер?

    @mmxdesign
    Software Engineer
    select prodid, name from tableA a join tableB b on a.catid = b.id
    Ответ написан
    1 комментарий
  • ThinkPad T460s или Macbook PRO 13''(2016)?

    @mmxdesign
    Software Engineer
    Одназначно Macbook Pro, еще желательно 15".
    Thinkpad только если вы пишите все на c# и asp.net. Хотя был где то опрос среди c# программистов, так там выиграл макбук с bootcampом под винду или виртуалкой...
    Так что выбор очевиден.
    А если будете под javascript/python/rails лучшие решения в основном в маке, а на винде все через костыли
    Ответ написан
    Комментировать
  • Сайт, где откритикуют мой дизайн и помогут сделать его лучше?

    @mmxdesign
    Software Engineer
    Англоязычный ресурс: чтобы получить критику на свой сайт, нужно дать оценку другому сайту тоже (вполне справедливо)
    www.criticue.com
    Ответ написан
    Комментировать