Nano Hash - криптовалюты, майнинг, программирование

Angularjs: как я могу запустить свою пользовательскую директиву после компиляции шаблона

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

<div class="my-directive" data-rawdata="user-{{user_id}}">
    <div class="raw user-{{user_id}}" id="user-{{user_id}}" style='display:none'>
        I'M HERE.
    </div>
</div>

Это моя директива:

.directive('myDirective', [function(Cart) {

  return {
    restrict: 'C',
    priority: -1000,
    link: function(scope, elem, attrs) {
        var element_id = attrs.rawdata

        if(element_id){

            var found1 = angular.element("#" + element_id); // not found
            var found2 = angular.element("." + element_id); // not found
            var found3 = angular.element(".raw"); // found

            console.log( [found1.length, found2.length, found3.length] );
            console.log( found3.attr('id') );       //  -> still not compile = user-{{user_id}} ?
            console.log( found3.attr('class') );    //  -> still not compile = user-{{user_id}} ?
        }

    }
  };
}])

И моя директива не может получить доступ к элементу по идентификатору, потому что она еще не завершила привязку значения идентификатора.

Есть ли способ разрешить выполнение моей директивы после завершения привязки? Я пробовал приоритет -1000 без везения.

мой плункер: http://plnkr.co/edit/2J7t6qK7F5MtyWI64Wpa?p=preview


Ответы:


1

Оберните свою директивную работу в $timeout. Это позволяет запускать код ссылки после завершения рендеринга, например:

$timeout(function(){
    if(element_id){
        var found1 = angular.element("#" + element_id)
        var found2 = angular.element("." + element_id)
        var found3 = angular.element(".raw")

        console.log( [found1.length, found2.length, found3.length] );
        console.log( found3.attr('id') );       //  -> still not compile = user-{{user_id}} ?
        console.log( found3.attr('class') );    //  -> still not compile = user-{{user_id}} ?

        if(found1.length)
            data = "Your data is " + found1.html()
        }

        angular.element(".result", elem).html( data || "Data not found" )
 }, 0);

Также не забудьте добавить $timeout в свою директиву.

26.06.2014
  • Ах, ты прав. Как я забыл, что $timeout может исправить почти все. спасибо, Мэтт. 26.06.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..