从我看到的所有示例中,这应该可以工作:(请参阅EDIT,我回答了我自己的问题。)
.directive('ssmViewport', ['$compile', 'ssmLayoutMan', function($compile, layoutManager) {
return {
restrict: 'AE',
replace: false, // TODO: remove if false is the default.
link: function (scope, element, attrs) {
layoutManager.renderView = function (view) {
console.log('this text does appear in the log...');
element.append('This text should appear...'); // but it doesn't appear
// these two commented lines are what I'm really trying to do.
//element.append(view.template);
//$compile(element.contents())(scope);
}
};
}
};
}])
在我调用的代码的其他地方:
layoutManager.renderView({template: '<div some-custom-directive></div>'});
但唉......元素似乎没有改变。我在 $compile 之后尝试了 scope.$apply() ,但它只是抛出一个关于已经在摘要中的错误,并且仍然不显示对元素的更改。
编辑:
我回答了我自己的问题。我将为任何可以解释为什么会这样的人标记一个正确的答案...
答案是:ssmViewport 是一个指令,它在一些注入的标记中定义,如下所示:
var html = $compile(templateThatContainsTheSSMViewport)(scope);
element.html(html);
但是,如果我像下面这样注入它,那么它将起作用:
element.html(templateThatContainsTheSSMViewport);
$compile(element.contents())(scope);
我昨天刚开始学习角度,所以我还不明白其中的区别......对这个问题的任何启示都会是一个福音:)