У меня есть функция в моем контроллере 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 в мой шаблон?
(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;
ng-show
,ng-click
и т. Д.