2014-10-15 3 views
9

angulargs 템플릿은 "ng-repeat"및 기타 지시문을 포함한 문자열로 사용합니다. 결과 HTML을 문자열로 생성하기 위해 컨트롤러에서 컴파일하고 싶습니다. 내가 각도에 적용하려는 작업에AngularJS 템플릿 문자열에서 HTML 문자열 생성

예 :

var template = '<div ng-repeat="item in items">{{item.data}}</div>'; 
var linkFunction = $compile(template); 
var result = linkFunction($scope); 

console.log(result); // prints the template itself! 

감사 :이 내가했습니다 컨트롤러에서 수행되어야 할

Input: 
------- 
var template = '<div ng-repeat="item in items">{{item.data}}</div>'; 

Output: 
-------- 
var result = '<div>1</div><div>2</div><div>3</div><div>4</div>'; 

나는 다음과 같은 시도!

<div ng-html-compile='<div ng-repeat="item in items">{{item.data}}</div>'></div> 

또는 예를 들어

angular.module('myApp') 

.directive('ngHtmlCompile', ["$compile", function ($compile) { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attrs) { 
      scope.$watch(attrs.ngHtmlCompile, function (newValue, oldValue) { 
       element.html(newValue); 
       $compile(element.contents())(scope); 
      }); 
     } 
    } 
}]); 

후 : 내가 프로젝트의 지시 커플 전에 자신을 만들어이를 위해

var template = angular.element('<div ng-repeat="item in items">{{item.data}}</div>'); 
var linkFunction = $compile(template); 
var result = linkFunction($scope); 
$scope.$apply(); 

console.log(template.html()); 

답변

7

이에게 소용돌이를 줘 문자열은 동적 일 수 있습니다.

<div ng-repeat="item in items" ng-html-compile="item.template"> 
</div> 
+0

"오류 : $ apply already in progress"가 throw됩니다. Angular 1.0.8을 사용하고 있습니다. – phikry

+0

"$ scope. $ digest();"를 변경해보십시오. "$ scope. $ apply();" - 편집을 참조하십시오. – Fordio

+0

내 응용 프로그램에서 다음을 throw합니다. $ rootScope : inprog "이미 진행중인 작업": $ digest가 이미 진행 중입니다 (1.5.5를 사용) –