2014-03-13 4 views
1

У меня есть простой строки следующим образом:

var templateString = "<span>This is a test</span>" 

Эта строка определяется внутри link зависит работа директивы.

Теперь внутри функции link, я выполняю следующий код:

scope.$eval(templateString); 

Мой следующий шаг заключается в $compile данных и связать его с размахом.

Однако я получаю ошибку, когда я делаю $eval:

Uncaught Error: Syntax Error: Token 'span' is an unexpected token at 
column 2 of the expression [<span>This is a test</span>] 
starting at [span>This is a Test</span>]. 

Но если посмотреть на документации, расположенной here, я, кажется, выполнили шаги правильно пока строка не оценивает.

EDIT: Я использую следующий пример из документации:

angular.module('compile', [], function($compileProvider) { 
    // configure new 'compile' directive by passing a directive 
    // factory function. The factory function injects the '$compile' 
    $compileProvider.directive('compile', function($compile) { 
     // directive factory creates a link function 
     return function(scope, element, attrs) { 
     scope.$watch(
      function(scope) { 
      // watch the 'compile' expression for changes 
      return scope.$eval(attrs.compile); 
      }, 
      function(value) { 
      // when the 'compile' expression changes 
      // assign it into the current DOM 
      element.html(value); 

      // compile the new DOM and link it to the current 
      // scope. 
      // NOTE: we only compile .childNodes so that 
      // we don't get into infinite loop compiling ourselves 
      $compile(element.contents())(scope); 
      } 
     ); 
     }; 
    }) 
    }); 

Я не используя $watch однако, так как я не нужно смотреть любое выражение и есть шаблон со мной уже (templateString) ,

+0

В документации, как представляется, не упоминается '$ eval' в любом месте. Вы должны непосредственно «компилировать» шаблон и предоставить ему область для создания «элемента», вам не нужно никакое '$ eval', если вы не получите эту строку через элементы' attrs'. –

+0

@musically_ut Я обновил свой вопрос, чтобы указать пример, который я использую. Если я не буду оценивать, то любое угловое выражение в теге span будет показано как оно не оценивает его сначала ... Я хочу, чтобы угловые выражения (если они есть) были оценены слишком, прежде чем компилировать его. – callmekatootie

ответ

4

$eval предназначен для оценки выражения, ваш шаблонString не является допустимым выражением, поэтому возникает ошибка.

Вы должны использовать только $compile(templateString)(scope), он скомпилирует ваш шаблон и ссылку с областью действия, означает, что все выражения будут оцениваться с помощью поставляемой области.

+0

Как добавить скомпилированный шаблон в элемент? Я имею в виду, после выполнения '$ compile', я хочу добавить скомпилированный шаблон в определенное место в DOM - как это сделать? – callmekatootie

+0

Nevermind, я получил свой ответ о добавлении скомпилированного шаблона [здесь] (http://stackoverflow.com/questions/14846836/insert-an-angular-js-template-string-inside-an-element). Спасибо за Ваш ответ. – callmekatootie

Смежные вопросы