带ng- translude的Angular指令
angular directive with ng-transclude
我已经做了一个非常简单的段落指令基于HTML <p>
标签。
angular.module('myApp').directive('paragraph', function() {
return {
restrict: 'E',
transclude: true,
controller: function() {
var vm = this;
vm.text = "Paragraph text from controller"
},
controllerAs: 'ParagraphViewModel',
template: '<p ng-transclude>{{ParagraphViewModel.text}}</p>'
}
});
我在我的html中使用该指令,如下所示:
<paragraph>This is a very simple paragraph</paragraph>
<paragraph></paragraph>
我有一个输入,我把它绑定到ParagraphViewModel.text
<input type="text" ng-model="ParagraphViewModel.text">
问题是,当我改变输入时,第二个<paragraph>
按预期变化,但第一个的值没有。
再看一下文档,特别是这个特定的示例。
你看,当Angular在 中跨接你的内容时,<paragraph>This is a very simple paragraph</paragraph>
它完全忘记了指令模板中的{{ParagraphViewModel.text}}
绑定,因为<p ng-transclude>
的所有内容将被<paragraph>
标签的内容所取代。
第二种情况会像你期望的那样工作,仅仅是因为内容替换没有发生,Angular默认使用你模板中的内容。
我猜你在这里想要实现的是传递你的指令一个默认文本,然后用绑定输入改变它。
您可以通过使用隔离作用域实现这一点。你应该这样做:
在你的视图:
<div ng-app="myApp">
<paragraph pgtext="Foo" pgmodel="bar"></paragraph>
<paragraph>{{bar}}</paragraph>
<input type="text" ng-model="bar">
</div>
在你的App:
angular.module('myApp',[]);
angular.module('myApp').directive('paragraph', function() {
return {
restrict: 'E',
transclude: true,
scope: {
pgmodel: '=',
pgtext: '@'
},
template: '<p ng-transclude>{{pgmodel || pgtext}}</p>'
}
});
DEMO: JSBin
相关文章:
- 将JSON对象传递给angular指令
- Angular指令在alertify setContent内容中不起作用
- 在其他javascript框架模板中运行angular指令
- 如何动态禁用Angular指令
- 在 Angular 指令中,如何进行回调,其中函数名称位于父范围的变量中
- Angular指令中的最佳实践是将文本输入设置为英尺和英寸的格式
- 不适用于动态数据的Angular指令来自$http
- 这段jquery代码在angular指令中不起作用
- Angular 指令似乎没有使用元素传入的选项执行
- 带有Angular指令的HTML;附加时无法工作
- 如何使用angular指令从html中获取数组
- 如何正确控制Angular指令的$dirty和$pure状态
- 在 Angular 指令中定义一个用于 ng-click 的函数
- HTML 标记在使用 Angular 指令时被视为纯文本
- 当 Angular 指令的名称真正重要时
- 如何将侦听器添加到 Angular 指令中
- 嵌套的Angular指令触发父对象上的作用域函数
- 在ui路由器中以Webpack块的形式懒惰地加载Angular指令
- 超链接;编译angular指令内的模板后无法工作
- 用angular指令构建嵌套树