从Formly表达式访问控制器的范围

时间:2016-01-12 19:31:19

标签: angularjs angular-formly

Formly's expressions中访问控制器范围(即$scope)的正确方法是什么?

我的用例:

我有一个属性,例如$scope.showEmailField = false我希望在此属性设置为false时隐藏我的Formly字段。我尝试使用hideExpression: 'showEmailField',但看起来Formly创建了自己的子范围。我找到的唯一方法是使用$parent.showEmailField表达式,但这不是一个好习惯,并且表达式没有被正确跟踪。我必须将showEmailField移动到模型对象并使用以下表达式:model.showEmailField。这样做没问题,但这有点难看。

我已多次重读有关表达式,字段配置和其他内容的文档,但我无法理解所有这些上下文和范围如何与Formly一起使用。也许我们需要一篇关于这个主题的好的解释性文章。

2 个答案:

答案 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){               
             }
        }         
    }
]
相关问题