是否可以呈现具有隔离范围的 angular 指令模板?
Is it possible to render angular directive templates with isolated scope?
我遇到了使用隔离作用域的 angular 指令的奇怪行为。显然,模板是使用旧范围(即使被嵌入)而不是新范围解析的。
这听起来有点奇怪,因为它违反了指令范围的 'isolation'
html :
<div ng-app="myApp">
<div ng-controller="MyController">
out prop = {{prop}}
<div my-directive prop="'valueIN'">
in prop = {{prop}}
</div>
</div>
</div>
js
function MyController($scope) {
$scope.prop = 'valueOUT';
}
angular.module('myApp',[]).directive('myDirective', function() {
return {
scope: { prop: '=' }
};
});
这输出:
Angular 1.1
out prop = valueOUT
in prop = valueIN
Angular 1.2
out prop = valueOUT
in prop = valueOUT
这对我来说听起来很奇怪...
嵌入模板也有相同的行为。
是否可以在 1.2 中获得 1.1 的行为?
对应fiddle:
https://jsfiddle.net/4s1fxjmq/
一种方法是在适当的范围内重新编译元素:
.directive('myDirective', ['$compile', function($compile) {
return {
scope: {
prop: '='
},
link: function(scope, element, attr) {
attr.$set('myDirective', null)
$compile(element)(scope)
}
}
}])
我遇到了使用隔离作用域的 angular 指令的奇怪行为。显然,模板是使用旧范围(即使被嵌入)而不是新范围解析的。
这听起来有点奇怪,因为它违反了指令范围的 'isolation'
html :
<div ng-app="myApp">
<div ng-controller="MyController">
out prop = {{prop}}
<div my-directive prop="'valueIN'">
in prop = {{prop}}
</div>
</div>
</div>
js
function MyController($scope) {
$scope.prop = 'valueOUT';
}
angular.module('myApp',[]).directive('myDirective', function() {
return {
scope: { prop: '=' }
};
});
这输出:
Angular 1.1
out prop = valueOUT
in prop = valueIN
Angular 1.2
out prop = valueOUT
in prop = valueOUT
这对我来说听起来很奇怪... 嵌入模板也有相同的行为。
是否可以在 1.2 中获得 1.1 的行为?
对应fiddle: https://jsfiddle.net/4s1fxjmq/
一种方法是在适当的范围内重新编译元素:
.directive('myDirective', ['$compile', function($compile) {
return {
scope: {
prop: '='
},
link: function(scope, element, attr) {
attr.$set('myDirective', null)
$compile(element)(scope)
}
}
}])