【问题标题】:Accessing controller's scope from Formly expressions从 Formly 表达式访问控制器的范围
【发布时间】:2016-01-12 19:31:18
【问题描述】:

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


我的用例:

我有一个财产,例如$scope.showEmailField = false 并且我希望在此属性设置为 false 时隐藏我的 Formly 字段。我尝试使用hideExpression: 'showEmailField',但看起来Formly 创建了它自己的子范围。我发现的唯一方法是使用$parent.showEmailField 表达式,但这不是一个好的做法,并且无法正确跟踪表达式。我不得不将showEmailField 移动到模型对象并使用以下表达式:model.showEmailField。这工作正常,但它有点丑陋的解决方法。


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

【问题讨论】:

    标签: angularjs angular-formly


    【解决方案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 ;          
                }
              }
            ];
        });
    

    有关更多详细信息,您可以阅读 angular formly 文档中的 this link。大多数 formly 字段配置接受一个函数参数来处理一些杂项表达式。

    【讨论】:

      【解决方案2】:
      var fields = [{            
              key: 'email', 
              type: 'input',              
              templateOptions: {                
                  label: 'Email',               
                  required: true,              
                  disabled: false,
                  options:[1,2,3]             
              }, 
              expressionProperties: { 
                  'templateOptions':function($viewValue,$modelValue,scope){               
                   }
              }         
          }
      ]
      

      【讨论】:

      • 虽然这篇纯代码帖子可能会回答这个问题,但请添加解释为什么会这样。
      猜你喜欢
      • 1970-01-01
      • 2014-02-22
      • 2016-08-13
      • 2016-03-28
      • 2015-09-09
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      相关资源
      最近更新 更多