AngularJS指令未正确评估对象



我不正确地使用了对象。基本上,我想要:

angular.module('mobileDashboardApp')
    .directive('localForageModel', function ($localForage) {
        return {
            link: function postLink(scope, element, attrs) {
                scope.$watch(attrs.ngModel, function () {
                    $localForage.setItem(attrs.localForageModel, scope[attrs.ngModel]);
                    console.log(attrs.ngModel);
                    console.log(scope[attrs.ngModel]);
                    console.log(scope.user.companyId);
                    console.log(scope["user.companyId"]);
                });
            }
        };
    });

输出

user.companyId
dsf
dsf
dsf

而不是当前输出:

user.companyId
undefined
dsf
undefined

有人能给我指正确的方向吗?或者建议一个更好的标题?

您的符号不正确,必须是

var props = attrs.ngModel.split(".");
scope[props[0]][props[1]]

由于点符号对动态属性无效,因此object['abc.def']必须写成object['abc']['def']

需要注意的是,你肯定应该进行某种对象属性检查,例如,如果你的ngModel属性不是abc.def,这将引发异常,所以最好为这个提供通用函数

在JS中,包含.(点)的属性名和点访问的嵌套对象之间存在差异。所以scope.user.companyIdscope["user.companyId"]是不同的。你可以有这样的JS对象:

{ 
   user: {
       companyId: 1
   },
   "user.companyId" : 2
}

所以,如果您真的需要访问具有字符串的属性,该字符串表示对象内的路径(而不是单个属性名称),则需要对其进行解析。有很多方法可以做到这一点。天真的方式应该是这样的:

function getProperty(obj, pathString) {
  var properties = pathString.split(".");
  var result = obj;
  for (var i in properties) {
    result = result[properties[i]];
  }
  return result;
}

在您的情况下可以这样使用:getProperty(scope, "user.companyId")

访问对象的方式在例如。console.log(scope["user.companyId"]);

这应该是console.log(scope["user"]["companyId"]);

我希望这能帮助你:-)

相关内容

  • 没有找到相关文章

最新更新