Pull to refresh
23
0
Александр Кухта @RiderSx

Пользователь

Send message
Еще одна очень нужная директива теперь добавилась (ранее была в angular-ui): ng-if:
<div class="alert alert-danger" ng-if="errors">...</div>

В отличии от ng-show/ng-hide, которые просто манипулировали CSS свойствами, сия же директива честно убирает элемент из DOM :)
Дополню ваш пример: ideone.com/s2OGb9 (5.4.4)
Ничего не смешивается, если не делать этого намеренно, про templateUrl уже упомянули, но так же есть следующие факты:
— Можно использовать директивы не только как отдельные элементы, но и как некоторое нагромождение функционала на элемент через restrict: 'A|E|C|M', то бишь мы можем, например, навесить несколько обработчиков клика как-то так:
<button click-watcher another-click-watcher>Click me</button>

— Так же есть transclude, с помощью которого можно городить одну директиву внутри другой, в помощь ко всей этой вкуснятине приходит еще и наследование областей видимости ($scope которые), а так же возможность явно указать зависимость директивы от другой.
Да, нормально работает, с этим всегда все нормально было.
Ну, я даже не знаю, как обычно все делают, ввожу адрес да и все :) Суть в том, что это не напрягает, т.к. комп не выключается и вкладка с сайтом всегда висит закрепленная. Но кнопка для включения лайв эдита для текущей открытой вкладки все будет прекрасным дополнением :)
На данный момент у меня два дебаг конфига, для PHP и, собственно, для LiveEdit/JS Debug. Т.к. я использую два монитора, то у меня на одном открыта IDE, а на другом хром с всегда открытой нужной страницей. Было бы действительно здорово, если бы я мог включить лайв эдит, без запуска JS debug, кнопочкой из выпадающего меню кнопки расширения :)
Я уже разобрался чего куда, сначала даже и не видел, что создается новый конфиг дебага на лету :)
Настроил один конфиг как надо, замаппил нужные пути и все заработало (не считая вот этого бага, который уже, вроде как, фиксят). Просто нигде эти изменения, ломающие обратную совместимость, не были освещены в полной мере, сказали только про то, что теперь весь LiveEdit — это часть JS debug (хотя тут тоже не очень понятно, причем тут тогда CSS, но это не призыв к действию :) ), а про самую важную штуку, создание нового конфига дебага на лету, ни слова :(
Нет, $scope.$watch() нечего делать в фильтре, тот фильтр, что я привел был просто демонстрацией, не более, на деле же сам фильтр не должен рулить кэшированием, все это должно быть в контроллере или сервисе :)
Через $scope.$watch() для нужного массива вызывать у кэша .removeAll(). Позже сделаю демку, хотя вроде все и так понятно :)
Ежели надо обрезать кол-во отдаваемых элементов, то data = $filter('orderBy')(input, orderBy, reverse||false).slice(0, $s.count); :)
Что-то вроде этого:

angular.module('app')
    .filter('opened', ['$rootScope', '$cacheFactory', '$filter', function ($s, $cacheFactory, $filter) {
      var
        cache = $cacheFactory('openedFilter'),
        keyGen = function () {
          return angular.toJson(arguments);
        };

      return function (input, orderBy, reverse) {
        var
          cacheKey = keyGen(orderBy),
          data = cache.get(cacheKey);

        if (!data) {
          data = $filter('orderBy')(input, orderBy, reverse||false); // Не уверен, поймет ли фильтр undefined :)
          console.log('Применён фильтр «opened»');

          cache.put(cacheKey, data);
        }

        return data;
      }
    }]);

Да и к тому же, нельзя отдавать как ключ именно объект, т.к. при попытке вытащить из другого объекта (кэша в данном случае) что-то по ключу у этого ключа вызывается метод .toString(), со списком ( [] — список, {} — объект ) все хорошо отрабатывает, т.к. он преобразуется в строку вида «key1,another_key2,one_more_key3», а вот объект вне зависимости от содержимого всегда будет "[object Object]", Lo-Dash не производит каких-то хитрых операций с возвращаемым ключом, пруфлинк. :)
Все прекрасно, спору нет, но почему не использовали встроенный $cacheFactory? :)
Так и не понял зачем вы полностью сломали прекрасный плагин LiveEdit :(
Такой случай: проект на Symfony2, шаблоны twig, раньше я мог «вживую» редактировать CSS и все изменения тут же отображались (и то в случае, когда не включен местный assetic и CSS лежат в папке /web/*), а сейчас же я совершенно не представляю как мне все это безобразие завести, даже запуская совершенно бесполезный Javascript Debug на каком-то левом .html файле и переходя вручную на нужную страницу (на настроенном домене, который прописан в серверах проекта, кстати) я все равно не могу получить живое редактирование, встроенный же сервер не понимает абсолютные пути (т.к. URL выстраивается такой /projectName/src/somefile.html) до всех CSS и JS файлов, без которых работать ничего не будет (по понятный причинам).
Ну вот почти все, что выдало в консоль и есть ссылка, просто хромовский DevTools делает это нормальной ссылкой, кликабельной :)
По поводу StateManager, честно, так и не понял зачем он нужен, почему бы просто один раз не написать Interceptor, а все данные передавать в контроллеры через resolve.
Возможно, я не правильно понял, но вы вручную вызываете $digest? Если да, то это плохая практика, если нужно провести какую-то манипуляцию со $scope, в месте, где AngularJS сам за этими манипуляциями не сможет уследить (к примеру $.animate, или еще что-нибудь асинхронное), то стоит использовать $scope.$apply все же.

Просто я сам никогда с ошибкой из п.3 никогда не сталкивался, часто бывает Error $scope.$digest already in progress, но не более того :)

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity