You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular JS技术问询:如何将无列表名JSON及this赋值给作用域变量

关于AngularJS的两个常见问题解答

1. 如何将不含列表名的JSON字符串赋值给AngularJS中的作用域变量?

这个操作其实很直观,核心就是先把JSON字符串解析成JavaScript可识别的对象/数组,再绑定到$scope变量上,分两种常见场景来说:

场景一:处理本地现成的JSON字符串

如果你手里已经有了无列表名的JSON字符串(比如前端硬编码、从本地存储读取的),直接用JSON.parse()方法解析后赋值给$scope即可:

app.controller('MyController', function($scope) {
  // 不含列表名的JSON数组字符串
  const rawJsonStr = '[{"id":1, "name":"张三"},{"id":2, "name":"李四"}]';
  // 解析为JS数组后绑定到作用域
  $scope.userList = JSON.parse(rawJsonStr);
});

之后在视图里就能用ng-repeat="user in userList"直接遍历渲染啦。

场景二:从后端接口获取这类JSON

如果是通过$http请求后端拿到的响应,AngularJS会自动帮你把JSON字符串解析成对象/数组,直接取响应数据赋值给$scope就行:

app.controller('MyController', function($scope, $http) {
  $http.get('/api/get-users') // 后端返回无列表名的JSON数组,比如[{"id":1,...},...]
    .then(function(response) {
      // 直接绑定响应数据到作用域变量
      $scope.userList = response.data;
    });
});

2. 如何在AngularJS中将this赋值给作用域变量?

在AngularJS里this的指向会随上下文变化,所以推荐两种稳定的绑定方式:

方法一:直接绑定到$scope变量

如果你习惯用$scope的写法,可以在控制器构造函数里把this赋值给$scope的一个属性,避免后续方法里this指向混乱:

app.controller('MyController', function($scope) {
  // 把当前控制器的this绑定到$scope.self
  $scope.self = this;
  // 给this添加属性
  this.nickname = "小橙子";
  
  // 在控制器方法里也能通过$scope.self访问到原this的属性
  $scope.showNickname = function() {
    console.log($scope.self.nickname);
  };
});

视图里可以这么用:

<div ng-controller="MyController">
  <p>{{self.nickname}}</p>
  <button ng-click="showNickname()">显示昵称</button>
</div>

方法二:使用ViewModel模式(更推荐)

现在更流行的写法是用vm(ViewModel的缩写)来存储this,避免和$scope混淆,代码逻辑更清晰:

app.controller('MyController', function() {
  // 把this赋值给vm,后续所有属性、方法都挂载在vm上
  var vm = this;
  vm.nickname = "小柚子";
  
  vm.showNickname = function() {
    console.log(vm.nickname);
  };
});

视图里要配合controllerAs语法使用:

<div ng-controller="MyController as vm">
  <p>{{vm.nickname}}</p>
  <button ng-click="vm.showNickname()">显示昵称</button>
</div>

这种方式能减少$scope的滥用,还能彻底避免this指向混乱的问题,代码维护起来更轻松。

内容的提问来源于stack exchange,提问作者satya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:15:42