0

Я делаю что-то подобное в Angular.
После компиляции объект не будет передан в ДирективуB правильно.
Однако, если я передал объект, определенный в области видимости, это будет нормально.
Интересно, почему это происходит и как я могу передать объект (не в область) в директиву с скомпилированной html-строкой в ​​простой форме? Я использовал закрытие для этого, но его нелегко поддерживать.

В DirectiveA.js:Угловой объект undefined после скомпилированного в html string перейдите к другой Директиве

.directive('DirectiveA', function($compile, $parse) { 
    return 
    ... 
    link: function(scope, element, attrs) { 

     function func_be_called_somewhere (...) { 

      var obj= {"key":"value"}; //obj is not in scope, I create it here 

      var el = '<DirectiveB para="obj" ...>'; 
      var content = $compile(el)(scope); //compiled here 
      element.append(content); 
     } 
    } 
} 


В DirectiveB.js:

.directive('DirectiveB', function($compile, $rootScope, $parse) { 
    ... 
    scope: { 
     ... 
     para: '=' 
     ... 
    } 
    link: function(scope, element, attr) { 
     console.log(scope.para); //undefined 
    } 
} 

JS Bin: http://jsbin.com/depohoqofi/edit?html,js,console,output

+0

Причина, по которой это произошло , Я думаю, что ответ не лучше, чем это официальное объяснение https://docs.angularjs.org/api/ng/service/$compile. «Компилирует HTML-строку или DOM в шаблон и создает функцию шаблона, которая затем может использоваться для связывания области и шаблона вместе». Слияние или переписывание какого-либо существующего кода в директиву и перемещение существенных переменных в область видимости - это боль для вашего случая сейчас, но ясно, что вы должны это делать. Проблема довольно связана с http://stackoverflow.com/questions/2051678/getting-all-variables-in-scope –

ответ

0

Я думаю, вы должны положить OBJ в Вашей области:

scope.obj= {"key":"value"}; //obj is not in scope, I create it here 
var el = '<DirectiveB para="scope.obj" ...>'; 
var content = $compile(el)(scope); //compiled here 
element.append(content); 

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

  • Нет связанных вопросов^_^