Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法访问html中的$scope值,$http.post success函数中设置的值_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 无法访问html中的$scope值,$http.post success函数中设置的值

Javascript 无法访问html中的$scope值,$http.post success函数中设置的值,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我无法访问$http post成功时设置的$scope属性的值。我正在尝试在index.html文件中访问它。下面是代码供参考,请帮助我解决它,我是新的AngularJs var app = angular.module('formExample', []); app.controller("formCtrl", ['$scope','$rootScope', '$http', function($scope,$rootScope, $http) { $scope.loginur

我无法访问$http post成功时设置的$scope属性的值。我正在尝试在index.html文件中访问它。下面是代码供参考,请帮助我解决它,我是新的AngularJs

var app = angular.module('formExample', []);
app.controller("formCtrl", ['$scope','$rootScope', '$http',    
function($scope,$rootScope, $http) {
    $scope.loginurl = 'loginsubmit.php';        
    $scope.loginFormSubmit  = function(isValid) {           
        if (isValid) {              

            $http.post($scope.loginurl, {"username": $scope.username,"password": $scope.password}).
                    success(function(data, status) {
                        $scope.status = status;
                        $scope.data = data;
                        $scope.isAdmin=data.isAdmin;
                        $scope.username=data.username;                          
                        location.href="Index.html";                         
                    })  
        }else{

              alert('Form is not valid');
        }

    }



 html form code

 <div class="row" ng-app="formExample" >
       <div ng-controller="formCtrl">
          <div class"col-md-8">&nbsp;</div>
          <div>username: {{$scope.username}} </div>

您可能需要将location.href超时,以便$scope不会丢失

在重定向之前,您有几个选项可以使您的用户数据成为应用程序的全局数据。您可以将用户变量放在影响所有视图的控制器中,如app.js中的控制器,或将其放在$rootScope或localStorage/sessionStorage中,如注释中的@Marco所示


另外,请使用{{username}}而不是{{$scope.username}。后者不打印任何内容。

对于登录和身份验证,我通常执行Marco在其评论中提到的相同操作,并将用户信息存储在$rootScope中。然而,这基本上是我使用它的唯一目的,因为最好避免用一堆东西污染rootScope

我在一个JSFIDLE中为你建立了一个小游乐场,不知羞耻地从本文中偷来:

$rootScope和-$scope.html

所有其他答案/评论都很好。我只是想让你拿着这把小提琴玩。通过隔离小问题、测试它们、打破它们并将它们修改成小提琴,我学到了很多东西

编辑:有多种方法可以在角度控制器之间共享数据:

此外,为了解决在没有数据库的控制器之间共享数据的其他方法,您还可以创建一个身份验证“工厂”。服务和工厂是跨控制器共享数据的好方法,我相信它们是实际使用的方法

关于此选项和其他选项的详细讨论如下:

请参阅更新的fiddle with服务示例:

增加了以下内容:

app.service("auth", [ function () {
return {
    getAuth: function () {
        var info = {
            name: "Name",
            password: "Password"
            }
        return info;
        }
    };
}]);

location.href不是正在重定向页面吗?这将杀死$scope。谢谢Marco,您能建议我如何保留作用域,以便我可以在index.html页面中访问它并显示用户名。如果您使用SPA,则应将数据存储到$rootScope中,如果您不使用SPA,则应将其存储到localStorage中。无论OP是否重定向,$scope都将丢失。javascript在页面之间没有持久性loads@chakeda,您能用timeout&location.href显示您正在描述的行为吗?
app.service("auth", [ function () {
return {
    getAuth: function () {
        var info = {
            name: "Name",
            password: "Password"
            }
        return info;
        }
    };
}]);