Angularjs 访问控制器';形式表达式的作用域
在中访问控制器作用域(即Angularjs 访问控制器';形式表达式的作用域,angularjs,angular-formly,Angularjs,Angular Formly,在中访问控制器作用域(即$scope)的正确方法是什么 我的用例: 我有一个属性,例如$scope.showEmailField=false,我希望在将此属性设置为false时隐藏我的Formly字段。我曾尝试使用hideExpression:'showmailfield',但它似乎是Formly创建了自己的子范围。我发现的唯一方法是使用$parent.showmailfield表达式,但这不是一种好的做法,而且这种方法无法正确跟踪表达式。我必须将showmailfield移动到model对象
$scope
)的正确方法是什么
我的用例: 我有一个属性,例如
$scope.showEmailField=false
,我希望在将此属性设置为false
时隐藏我的Formly字段。我曾尝试使用hideExpression:'showmailfield'
,但它似乎是Formly创建了自己的子范围。我发现的唯一方法是使用$parent.showmailfield
表达式,但这不是一种好的做法,而且这种方法无法正确跟踪表达式。我必须将showmailfield
移动到model对象并使用以下表达式:model.showmailfield
。这样做还行,但有点难看
我已经多次阅读了有关表达式、字段配置和其他内容的文档,但我无法理解所有这些上下文和范围如何与Formly一起工作的概念。也许我们需要一篇关于这个主题的好的解释性文章。我认为解决您问题的最好方法是使用匿名函数来实现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 ;
}
}
];
});
有关更多详细信息,您可以在angular formly文档中阅读。大多数formly字段配置都接受函数参数来处理一些杂项表达式。虽然这篇仅限代码的文章可能会回答这个问题,但请添加解释,说明为什么会这样做。
var fields = [{
key: 'email',
type: 'input',
templateOptions: {
label: 'Email',
required: true,
disabled: false,
options:[1,2,3]
},
expressionProperties: {
'templateOptions':function($viewValue,$modelValue,scope){
}
}
}
]