在Formly's expressions中访问控制器范围(即$scope
)的正确方法是什么?
我的用例:
我有一个属性,例如$scope.showEmailField = false
我希望在此属性设置为false
时隐藏我的Formly字段。我尝试使用hideExpression: 'showEmailField'
,但看起来Formly创建了自己的子范围。我找到的唯一方法是使用$parent.showEmailField
表达式,但这不是一个好习惯,并且表达式没有被正确跟踪。我必须将showEmailField
移动到模型对象并使用以下表达式:model.showEmailField
。这样做没问题,但这有点难看。
我已多次重读有关表达式,字段配置和其他内容的文档,但我无法理解所有这些上下文和范围如何与Formly一起使用。也许我们需要一篇关于这个主题的好的解释性文章。
答案 0 :(得分:1)
我相信你问题的最佳解决方案是使用hideExpression的匿名函数,如下所示:
app.controller('MainCtrl', function MainCtrl($scope) {
var vm = this;
$scope.showEmailField = false;
vm.fields = [
{
key: 'email',
type: 'input',
templateOptions: {
type: 'email',
label: 'email',
},
hideExpression: function(){
return $scope.showEmailField ;
}
}
];
});
有关更多详细信息,您可以在有角度的形式文档中阅读this link。大多数形式字段配置接受函数参数来处理一些其他表达式。
答案 1 :(得分:-1)
var fields = [{
key: 'email',
type: 'input',
templateOptions: {
label: 'Email',
required: true,
disabled: false,
options:[1,2,3]
},
expressionProperties: {
'templateOptions':function($viewValue,$modelValue,scope){
}
}
}
]