【问题标题】:Dynamically insert variable into object path in JavaScript and Angular在 JavaScript 和 Angular 中将变量动态插入到对象路径中
【发布时间】:2015-06-18 23:08:15
【问题描述】:

我不知道我是否对这个概念的理解有误,但数小时的搜索并没有产生任何结果。

我想根据用户从下拉列表中选择的“类型”为表单动态加载字段。这通过角度绑定到变量“currentType”。这部分有效。

currentType = //whatever the user chose. Will evaluate to either "category1" or "category2"
currentFields = {}
fields = {
           'category1': {
                          propertyInfo {
                                        'label1'
                                        'label2'
                                        'label3'
                                        'label4'
           'category2': {
                          propertyInfo {
                                        'label5'
                                        'label6'
                                        'label7'
                                        'label8'

我想要发生的是,选择类​​型时,将加载字段。所以:

currentFields = field."currentType".propertyInfo

我不知道如何将该变量插入到对象路径中。我不断收到关于没有属性“currentType”的字段的错误。

【问题讨论】:

    标签: javascript angularjs variables object


    【解决方案1】:

    应该就这么简单(感谢 JS 的动态特性):

    currentFields = field[currentType].propertyInfo
    

    如果您不知道,它的工作原理是这样的。如果你有一个对象:

    var foo = {
      bar: "42"
    }
    

    "42" 可作为foo.barfoo['bar'] 访问。

    【讨论】:

    • 问题是我的变量“currentType”在页面加载时不会被定义。它需要用户输入。因此,当页面加载时,我收到一条错误消息ReferenceError: currentType is not defined。这就是为什么我认为 Angular 可能有办法做到这一点?
    • 嗯,这是一个完全不同的问题。您可以将默认值设置为 currentType 并在您的逻辑中处理它。
    • 我让你成为了一个笨蛋,但笨蛋让我失望了。总之,我使用$scope.$watch等待用户输入并更新currentFields
    • 我以前从未使用过 $watch,但文档并没有对此事有太多启示。我会在控制器中创建一个执行$scope.$watch(currentType, function(){ currentFields = field[currentType].propertyInfo }) 的函数吗?
    • 是的,差不多。 $scope.$watch('currentType', function(newVal) { $scope.currentFields = fields[newVal].propertyInfo})(前提是您在 $scope 和 fields 上有字段 currentTypecurrentFields,否则可用(可以是此函数的本地))
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多