繁体   English   中英

JSON.parse不会将JSON字符串转换为Angular中的对象

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

我正在为角度应用程序构建基于角色的登录名,当您第一次输入凭据时,会话对象将被发送回一堆属性,其中包括一系列用户可以选择以其身份登录的角色。 当用户为希望登录的相应角色选择单选按钮时,例如“管理员”,我使用ng-model' to update $ scope.model.selected` ng-model' to update为他们选择的任何对象。

但是,当我需要将它作为javascript对象时,在UI中的$scope.model会解析为字符串。 简而言之,我试图将我的模型转换回一个对象,但无法使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() ,在用户选择一个角色并单击“登录”后将触发该函数。

知道如何使它起作用吗? 而且我认为我没有使用足够的新版本的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}}"而不是angular的ng-value="model" value=会将对象解析为字符串,而ng-value会将其保留为对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM