Как добавить HTML из контроллера в шаблон директивы AngularJS - ошибка не может интерполировать

0

У меня есть функция в моем контроллере AngularJS:

//some stuff from controller

var variable1;
var variable2; 

$scope.setTitle = function () { 
            if ( //sth) {
                variable1 = "string"
                return variable1;
            }
            else {
                (function () {
                    //setting the variable2 - it will be the HTML code
                      variable2 = angular.element(document.querySelector('titleID'));
                      variable2.append(title);                        
                })();
            return variable2;
            }
        };

Я получаю title из файла JSON и выглядит так:

 title = "Return product: <span data-ng-bind=\"productRet.ID\" />"

Я должен использовать JSON файл, потому что у меня есть большое "дерево" внутри этого файла JSON, и title отличается в зависимости от того, что произойдет внутри оператора function в else

Я setTitle() в своем шаблоне в директиве:

.directive('myDirective', ['$compile', function ($compile) {
    return {
        restrict: 'E',
        link: function (scope, element, attrs) {
            var template = { 
                             <!-- a lot of HTML -->
                             + "<div id=\"titleID\">"
                                 + "<span class=\"navbar-brand\" > {{setTitle()}} </span>"
                             + </div>
                           };

            templateObj = $compile(template)(scope);
            element.append(templateObj);
            }
        }
     }]);

Если результатом setTitle() является variable1 все в порядке. Проблема в том, когда результат variable2 потому что я получаю сообщение об ошибке:

"[$ интерполяция: interr] Нельзя интерполировать: {{setTitle()}}
Ошибка: [$ parse: isecdom] Ссылка на узлы DOM в угловых выражениях запрещена! Выражение: setTitle()

Как правильно вставить HTML-код из переменной2 в мой шаблон?

  • 0
    Вы не должны манипулировать DOM в контроллерах. Это полностью против философии AngularJS. Перейти к функции директивной ссылки. Или лучше поместить его в HTML через ng-show , ng-click и т. Д.
Теги:
interpolation
append
compilation

1 ответ

1
(function () {
                    //setting the variable2 - it will be the HTML code
                      var variable2 = angular.element(document.querySelector('titleID'));
                      variable2.append(title);                        
                })();
            return variable2;

variable2 недоступна вне области действия. Попробуйте что-то вроде этого:

var variable2;
(function () {
    //setting the variable2 - it will be the HTML code
    variable2 = angular.element(document.querySelector('titleID'));
    variable2.append(title);                        
})();
return variable2;
  • 0
    Да да, это моя ошибка, но даже если это выходит за рамки, я получаю сообщение об ошибке

Ещё вопросы

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