Угловые директивы, использующие $ templateRequest

0

Поэтому я нажимаю те же HTML-шаблоны при нажатии кнопки и после ввода имени в тег ввода с угловыми директивами.

Это мои директивы:

$scope.folder_name = '';
$scope.folder_count = 0;

cheapWatcherApp.directive("addfolder", function () {
    return {
        restrict: "E",
        templateUrl: chrome.extension.getURL('views/folderName.html')
    }
});

cheapWatcherApp.directive("addfolder", function ($compile, $templateRequest)    {
    return function ($scope, $element, $attrs) {
        $('.createBtn').bind("click", function () {
            $scope.folder_count++;
            $scope.folder_name = document.getElementById('folder_name').value;
            $templateRequest(chrome.extension.getURL('views/newFolder.html')).then(function (html) {
                var template = angular.element(html);             
                angular.element(document.getElementById('space-for-folders')).append($compile(template)($scope));
            });           
        });
    };
});

Это мой HTML-шаблон, который я вводил:

<div class="new_folder">
    <div class="folder_icon">
        <div class="folder_icon_border">
            <div class="folder_icon_bubble"></div>
            <div class="folder_icon_bubble"></div>
            <div class="folder_icon_bubble"></div>
        </div>
    </div>
    <div class="folder_name">
        <p class="folder_name_txt">{{folder_name}}</p>
    </div>
</div>

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

Насколько я понимаю, это потому, что $ templateRequest после первой инъекции ставит шаблон в $ templateCache и поэтому все шаблоны становятся с тем же именем.

Как я мог преодолеть эту проблему и сделать каждую инъекцию разными именами?

  • 0
    Проверьте этот ответ: stackoverflow.com/a/14721340/1615594
  • 0
    @user013948 user013948 это не помогает очистить кеш, так что, вероятно, это не проблема кеша ...

1 ответ

0

Поэтому, если кто-то столкнется с этой проблемой, я исправил свой код. Одна из моих директив теперь выглядит так:

cheapWatcherApp.directive("addfolder", function ($compile, $templateRequest) {
    return function ($scope, $element, $attrs) {
        $('.createBtn').bind("click", function () {
            $scope.folder_count++;
            angular.element(document.getElementById('space-for-folders')).append($compile('<div class="folder_' + $scope.folder_count + '"></div>')($scope));
            $templateRequest(chrome.extension.getURL('views/newFolder.html')).then(function (html) {
                var template = angular.element(html);
                angular.element($('.folder_' + $scope.folder_count)).append($compile(template)($scope));
                $('.folder_' + $scope.folder_count + ' .new_folder .folder_name .folder_name_txt').text($('.folder_name').val());                
            });
        });
    };
});

Я скомпилировал дополнительный <div> и присвоил значение html-имени переменной jQuery, а не угловой переменной $ scope.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню