Javascript 如何将$scope中的值传递给AngularJS中的内部控制器?

Javascript 如何将$scope中的值传递给AngularJS中的内部控制器?,javascript,angularjs,Javascript,Angularjs,在我的angular app.js中,它是我index.html中的主控制器,我希望有这样一个函数: $scope.login = function (user) { $scope.authenticating = true; var config = { method: 'POST', url: '/api/Account/Login', data: {

在我的angular app.js中,它是我index.html中的主控制器,我希望有这样一个函数:

    $scope.login = function (user) {
        $scope.authenticating = true;
        var config = {
            method: 'POST',
            url: '/api/Account/Login',
            data: {
                'userName': user.loginUserName,
                'password': user.loginPassword,
                'rememberMe': user.loginRememberMe
            }
        };
        $http(config)
            .success(function (data) {         
                authentication.isAuthenticated = true;
                authentication.userName = user.loginUserName;
                localStorage.isAuthenticated = 'yes';
                $scope.template = $scope.templates[1];
                $state.transitionTo('home');
            })
    };

在index.html内用于模板的控制器中,我希望能够访问用户名。有人能告诉我怎么做吗?最初我尝试在app.js中设置$scope.user={},然后设置$scope.user.userName,但当我打开另一个模板及其app.js中的控制器时,您可以使用服务在控制器之间共享数据

app.service('userService', function() {
  var user = {};

  setUserName = function(name) {
    user.name = name;
  };

  getUser = function(){
      return user;
  };
});
设置数据的控制器

app.controller('FooController', ['$scope', 'userService',
    function ($scope, userService) {
        $scope.login = function (user) {
            $scope.authenticating = true;
            var config = {
                method: 'POST',
                url: '/api/Account/Login',
                data: {
                    'userName': user.loginUserName,
                    'password': user.loginPassword,
                    'rememberMe': user.loginRememberMe
                }
            };
            $http(config)
                .success(function (data) {
                    authentication.isAuthenticated = true;
                    userService.setUserName(user.loginUserName);
                    localStorage.isAuthenticated = 'yes';
                    $scope.template = $scope.templates[1];
                    $state.transitionTo('home');
                })
        };
    }
]);
另一个控制器,用于检索数据

app.controller('BarController', ['$scope', 'userService', function($scope, userService) {
    var username = userService.getUser().name
});

由于检索是异步的,您可能需要向用户服务添加一些事件/回调机制,以便在设置/更改名称时通知控制器。

所有子控制器都从父控制器继承
$scope
变量

<div ng-controller="c1">
    <div ng-controller="c2"></div>
</div>

youApp.controller('c1', ['$scope', function($scope){
    $scope.blabla = 1;
}]);

youApp.controller('c2', ['$scope', function($scope){
    // $scope.blabla is also 1 here because c2 is a child of c1
}]);

正如@Robin所建议的,我还建议您编写自己的授权服务

控制器之间可能重复的I can knowledge passing。但在我的例子中,我希望数据进入app.js中的控制器/页面。$scope值是否没有向下继承?现在AngularJS中是否有向下继承的方法:-(我将$scope传递给我的内部控制器,因此我认为外部控制器$scope变量是可见的。你能提供更多的代码吗?展示你的dom结构以及如何设置控制器等?你能给我一个服务的示例吗?它必须像Robin建议的get和set一样复杂吗函数?关键是我需要用户名在$scope上可见,就像我的部分代码{{user.userName}
yourApp.run(['$rootScope', functin($rootScope){
    $rootScope.foo = 'bar';
    // you can inject $rootScope in any controller you want and use $rootScope.foo
}]);