AngularJS动态作用域变量含空格字段报错的解决方法咨询
嘿,我来帮你理清这个问题——其实你那段带空格字段名的赋值代码本身是没问题的,你遇到的“未定义错误”大概率是后续引用这个变量时用错了语法,而不是赋值环节的问题。
先搞清楚核心:$scope是个JS对象,带空格的键名是允许的
JavaScript对象的属性名完全可以包含空格、特殊字符,只要你用方括号语法来赋值/访问就没问题。所以你这段代码:
var field = 'by hand'; $scope[field] = 'value';
执行后,$scope['by hand']确实会被设置为'value',本身不会抛出错误。
你遇到的错误,大概率是引用方式不对
接下来分两种场景说正确的引用方法:
1. 在控制器/JS代码里引用
绝对不能用点语法(比如$scope.by hand),因为点语法要求属性名是合法的JavaScript标识符(不能有空格)。必须继续用方括号:
// ✅ 正确 console.log($scope['by hand']); // 输出 'value' // ❌ 错误(语法直接报错) console.log($scope.by hand);
2. 在AngularJS模板里引用
模板里直接写{{by hand}}会被Angular解析成两个独立的变量by和hand,自然会报“未定义”。正确的写法有两种:
- 用方括号访问当前作用域的属性:
<!-- ✅ 正确写法1:明确用this指向当前作用域 --> {{ this['by hand'] }} <!-- ✅ 正确写法2:或者直接用方括号访问 --> {{ $scope['by hand'] }} - 更推荐的做法:把带空格的字段包装到父对象里
为了避免后续引用的麻烦,你可以先在$scope上定义一个普通对象,把带空格的字段作为它的子属性:
然后模板里引用就更清晰:// 控制器里的代码 $scope.customFields = {}; var field = 'by hand'; $scope.customFields[field] = 'value';{{ customFields['by hand'] }} <!-- 或者用双引号也可以 --> {{ customFields["by hand"] }}
最后给个小建议
虽然JS允许带空格的键名,但在AngularJS开发里,尽量避免直接在$scope上定义这类属性——不仅引用麻烦,还容易和其他变量混淆。如果是后端返回的字段名带空格,建议在前端先做一层映射,转换成合法的标识符(比如把by hand改成byHand),这样后续用点语法访问会更顺畅。
内容的提问来源于stack exchange,提问作者DINESH KUMAR
相关产品推荐
相关产品推荐

