JSON.parse won't在Angular中将JSON字符串转换为对象

JSON.parse won't convert JSON string into object in Angular

本文关键字:JSON 中将 字符串 转换 对象 Angular won parse      更新时间:2023-09-26

我正在为一个angular应用程序构建一个基于角色的登录,当你第一次输入你的凭据时,会话对象会被发送回来一堆属性,包括用户可以选择登录的角色数组。当用户选择他们想要登录的相应角色的单选按钮时,例如:"管理员",我使用ng-model' to update $scope.model。

然而,在某些时候在UI $scope.model被解析成一个字符串时,我需要它是一个javascript对象。简而言之,我试图将我的模型转换回对象,我无法让JSON.parse($scope.model)工作。

这是我的控制器:

$scope.submit = function() {
      $http
        .post(app.api.root + 'session-tokens', $scope.user)
        .then(
          // SUCCESS
          function (response) {
            $scope.model = { selected: response.data.results.roles[0] };
            $scope.results = response.data.results;
            $scope.isCorrect = true;
            $scope.welcome = 'Welcome, ' + $scope.user.username + '!';
            // redirect after login -- need to change this to a profile page
            // $location.path('/patients/22');
            $scope.login = function() {
              $scope.model = JSON.parse($scope.model);
              authSvc.user({
                id: response.data.results.userId,
                token: $scope.model.selected.token,
                role: $scope.model.selected.roleName,
                providerName: $scope.model.selected.providerName,
                username: $scope.user.username,
                isAuthenticated: true
              });
              $scope.user = authSvc.user();
              console.log(typeof $scope.model.selected);
            };
          }
};

我想进行转换的函数是$scope.login(),它在用户选择角色并单击login后触发。

你知道我怎么才能让它工作吗?我不认为我在一个新的版本的angular使用angular.fromJson

谢谢。

编辑

这是我在控制台得到的错误:

SyntaxError: Unexpected token o
at Object.parse (native)
at Scope.$scope.login (eval at <anonymous> (http://localhost:4000/$js/jquery.js:336:5), <anonymous>:32:39)
at http://localhost:4000/$js/angular.js:10288:21
at http://localhost:4000/$js/angular.js:18086:17
at Scope.$eval (http://localhost:4000/$js/angular.js:12045:28)
at Scope.$apply (http://localhost:4000/$js/angular.js:12145:23)
at Scope.$delegate.__proto__.$apply (<anonymous>:855:30)
at HTMLFormElement.<anonymous> (http://localhost:4000/$js/angular.js:18085:21)
at HTMLFormElement.jQuery.event.dispatch (http://localhost:4000/$js/jquery.js:4371:9)
at HTMLFormElement.elemData.handle (http://localhost:4000/$js/jquery.js:4057:28) 

编辑

所以$scope.model实际上返回一个对象,但$scope.model.selected返回一个json字符串,我需要它是一个对象。

返回字符串:

{"roleName":"Group Provider","providerId":100,"providerName":"TestProvider","token":"XXX"}

控制台。日志

console.log(response.data.results):
Object {userId: 3, roles: Array[2]}
console.log(response.data.results.roles[0]):
Object {roleName: "Administrator", providerId: 2, providerName: "TestLastNAme, Test", token: "xxx", $$hashKey: "0fL"}
console.log($scope.model):
Object {selected: "{"roleName":"Group Provider","providerId…Nn0.lwB6AggcMkvH_LcQzpUdLlbk3XBHTGBqCd8K07HBIfo"}"}
console.log($scope.model.selected):
{"roleName":"Group Provider","providerId":237,"providerName":"TestProvider","token":"xxx"} 
console.dir($scope.model):
Object
    selected: "{"roleName":"Insurance Group Provider","providerId":237,"providerName":"TestProvider","token":"xxx"}"
    __proto__: Object

当您尝试在对象上使用JSON.parse()时,会发生该错误。

所有这些,事实证明问题是我在单选按钮上使用value="{{model}}"而不是角的ng-value="model"value=将对象解析为字符串,而ng-value将其保留为对象。