Ответы пользователя по тегу Angular
  • Как передать данные из 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}
        });
    }});
    Ответ написан
    Комментировать
  • Как интегрировать сторонние 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()
    Если нужно конкретное решение дайте знать но лучше понять логику чем конкретное решение
    Ответ написан
    Комментировать