我正在尝试将控制器的变量传递到指令中,以便可以将其放置在指令的模板中。
我有一个这样的指令:
app.directive('alert', function() {
return {
restrict: "E",
replace: true,
transclude: true,
templateUrl: "partials/templates/alert.html",
link: function(scope, element, attrs) {
scope.type = attrs.type;
}
};
});
使用这样的模板:
<div class="alert alert-{{type}}">
<strong ng-if="type">{{type | capitalize}}:</strong> <span ng-transclude></span>
</div>
我使用指令如下:
<alert ng-show="alert.message" type="{{alert.type}}">{{alert.message}}</alert>
我的 ctrl 有一个看起来像这样的变量:
$scope.alert = {
type: 'success',
message: 'alert message'
}
问题是scope.type
在指令中一直显示为模板中的字符串'{{alert.type}}',而我希望它显示为简单的字符串'success'。
我试过给指令一个隔离范围,比如:
scope: {
type: '@'
}
但随后ng-show="alert.message
html 中的 失败(如果存在则不会返回 true,因此该指令永远不会显示),因为该指令失去了对 ctrl 范围的访问权限。
将此变量从控制器传递到指令并对其进行插值的正确方法是什么?