【发布时间】:2017-05-18 23:04:08
【问题描述】:
有没有办法为组件的@绑定指定默认值。
我已经看到关于如何使用指令执行此操作的说明:How to set a default value in an Angular Directive Scope?
但是组件不支持编译功能。
所以,我有这样的组件:
{
name: 'myPad',
bindings : {layout: '@'}
}
我想让我的组件的用户不必指定“布局”属性的值。所以...,这个:
<my-pad>...</my-pad>
而不是这个:
<my-pad layout="column">...</my-pad>
而且...这个“布局”属性应该被正在使用的 angular-material JS 消耗,因此需要在渲染 DOM 之前绑定它(因此材质 JS 可以拾取它并添加元素对应的类)。
更新,一些截图澄清情况:
组件定义:
{
name : 'workspacePad',
config : {
templateUrl: 'src/workspace/components/pad/template.html',
controller : controller,
bindings : {
actions: '<', actionTriggered: '&', workspaces: '<', title: '@',
flex: '@', layout: '@'
},
transclude: {
'workspaceContent': '?workspaceContent'
}
}
}
组件使用:
<workspace-pad flex layout="column" title="Survey List" actions="$ctrl.actions"
action-triggered="$ctrl.performAction(action)">
<workspace-content>
<div flex style="padding-left: 20px; padding-right: 20px; ">
<p>test test</p>
</div>
</workspace-content>
</workspace-pad>
我想在第二个屏幕截图(使用)选项中设置“flex”和“layout”。
更新
我的“解决方案”在我的组件的构造函数中有这个:
this.$postLink = function() {
$element.attr("flex", "100");
$element.attr("layout", "column");
$element.addClass("layout-column");
$element.addClass("flex-100");
}
我希望我不必写最后两行(addClass)...但是,因为我们没有链接并在组件中编译...我想我现在应该对此感到满意.
【问题讨论】:
-
如果你不要求用户指定 layout 属性,为什么要把它放在指令的范围内呢?
-
我需要在为组件(my-pad)生成的标签中拥有那个“布局”属性。否则我的页面布局会乱七八糟。如果用户忘记(不小心)为它指定一个值,我想给它一个默认值('column')。
-
您是否在链接函数中的任何位置使用
layout范围属性?您能否发布整个指令或至少相关部分的代码? -
hi frishi....我刚刚更新了帖子以添加代码的屏幕截图。谢谢!
-
谢谢,但请不要发布代码截图。始终使用内置的 Markdown 格式或使用 Plunkr 或 JSFiddle 等服务并发布指向它们的链接。
标签: angularjs binding web-component