ng-show не работает в директиве

Я не могу заставить работать ng-show на своем spinningElement. У меня есть изолированная область для директивы, но, поскольку это элемент внутри, я думаю, что это должно работать?

У кого-нибудь есть идея, что я делаю неправильно?

Фрагмент кода:

angular.module('lr.upload.directives').directive('uploadButton', [
    'upload',
    function(upload) {
        return {
            restrict: 'EA',
            scope: {
                data: '=?data',
                url: '@',
                param: '@',
                method: '@',
                onUpload: '&',
                onSuccess: '&',
                onUploadTest: '&',
                onError: '&',
                onComplete: '&'
            },
            link: function(scope, element, attr) {
                scope.uploading=false;
                var el = angular.element(element);
                var fileInput = angular.element('<input type="file" />');
                var spinningElement = angular.element('<img ng-show="uploading" class="uploadSpinner" src="../../img/loading.gif" />');
                el.append(fileInput);
                el.append(spinningElement);

Решение:

angular.module('lr.upload.directives').directive('uploadButton', [
    'upload', '$compile',
    function(upload, $compile) {
        return {
            restrict: 'EA',
            scope: {
                data: '=?data',
                url: '@',
                param: '@',
                method: '@',
                onUpload: '&',
                onSuccess: '&',
                onUploadTest: '&',
                onError: '&',
                onComplete: '&'
            },
            link: function(scope, element, attr) {
                scope.uploading = false;
                var el = angular.element(element);
                var fileInput = angular.element('<input type="file" />');
               var spinningElement = $compile('<img ng-show="uploading" class="uploadSpinner" src="../../img/loading.gif" />')(scope);
                el.append(fileInput);
                el.append(spinningElement);

person Anders Metnik    schedule 12.09.2014    source источник
comment
Почему бы вам не использовать шаблон или templateUrl для разметки?   -  person Whisher    schedule 12.09.2014
comment
Я согласен с тем, что использование шаблона или URL-адреса шаблона должно быть правильным подходом, но разработчик сделал это таким образом, и я пытаюсь немного его расширить, поэтому я не хочу переформатировать его код. В остальном спасибо :)   -  person Anders Metnik    schedule 12.09.2014


Ответы (1)


Я думаю, вы должны использовать $compile, чтобы заставить его работать

var spinningElement = $compile('<img ng-show="uploading" class="uploadSpinner" 
src="../../img/loading.gif" />')(scope);
person Narek Mamikonyan    schedule 12.09.2014
comment
Спасибо. Также для всех остальных не забудьте добавить $compile в список зависимостей :) - person Anders Metnik; 12.09.2014