我以某种方式不正确地使用对象。基本上,我想:
dbGetQuery
输出
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
有人能指出我正确的方向吗?或建议更好的标题?
答案 0 :(得分:1)
你的表示法不正确,必须是
var props = attrs.ngModel.split(".");
scope[props[0]][props[1]]
由于点符号对动态属性无效,因此object['abc.def']
必须写为object['abc']['def']
旁注,肯定你应该进行某种对象属性检查,例如,如果你的ngModel属性不是abc.def
- 这将抛出异常,所以最好有这个通用函数
答案 1 :(得分:0)
在JS中,包含.
(点)的属性名称与由dot访问的嵌套对象之间存在差异。因此scope.user.companyId
与scope["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")
。
答案 2 :(得分:0)
您访问该对象的方式不正确,例如
console.log(scope["user.companyId"]);
这应该是
console.log(scope["user"]["companyId"]);
我希望这可以帮助你: - )