从我见过的所有例子中我都应该这样做:(见编辑,我回答了我自己的问题。)
.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之后尝试了范围。$ apply()但它只是抛出一个关于已经在摘要中的错误,并且仍然没有显示元素的更改。
编辑:
我回答了自己的问题。对于任何可以解释原因的人,我都会给出正确的答案......
答案是: ssmViewport是一个在某些标记中定义的指令,它是这样注入的:
var html = $compile(templateThatContainsTheSSMViewport)(scope);
element.html(html);
但是,如果我像下面那样注入它,那么它将起作用:
element.html(templateThatContainsTheSSMViewport);
$compile(element.contents())(scope);
我昨天刚刚开始学习角度,所以我不明白其中的差异......对这个问题的任何启示都会是一个福音:)