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){               
             }
        }         
    }
]