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