Javascript 如何在AngularJS中访问路由器UI控制器中的主控制器变量?

Javascript 如何在AngularJS中访问路由器UI控制器中的主控制器变量?,javascript,angularjs,controller,angular-ui-router,Javascript,Angularjs,Controller,Angular Ui Router,我正在尝试创建一个CRUD页面,使用AngularJS,使用AngularRouter UI进行页面更改 如何访问我的主控制器、路由控制器中的变量 //This is my main controller: var app = angular.module('app', [ 'ui.router' ]); app.controller('MyCtrl', function ($scope) { $scope.persons = [ {name: 'Daisy',

我正在尝试创建一个CRUD页面,使用AngularJS,使用AngularRouter UI进行页面更改

如何访问我的主控制器、路由控制器中的变量

//This is my main controller:
var app = angular.module('app', [
    'ui.router'
]);
app.controller('MyCtrl', function ($scope) {
    $scope.persons = [
        {name: 'Daisy', description: 'Developer'},
        {name: 'Zelda', description: 'Developer'},
        {name: 'Luide', description: 'Developer'},
        {name: 'Mario', description: 'Developer'}
    ];
});
这是我的路由器配置 app.configfunction$stateProvider,$urlRouterProvider{ $urlRouterProvider。否则为“/”

$stateProvider
    .state('list', {
        url: '/list',
        templateUrl: 'list.html',
        controller: 'MyCtrl'
    })
    .state('edit', {
        url: '/edit',
        templateUrl: 'edit.html',
        controller: function($scope, $state) {
            $scope.person = {name: "", description: ""};

            $scope.click = function () {
                $state.go('list');
            };
        }
    })
    .state('add', {
        url: '/add',
        templateUrl: 'edit.html',
        controller: function($scope, $state) {
            $scope.person = {name: "", description: ""};

            $scope.click = function () {
                // HOW TO CAN I ACCESS $SCOPE.PERSONS FOR MAKE THIS PUSH?
                $scope.persons.push($scope.person);
                $state.go('list');
            };
        }
    });

})

与其在MainController中创建$scope.persons,不如使用服务来存储persons对象:

app.service("People", function () {
   this.persons = [
        {name: 'Daisy', description: 'Developer'},
        {name: 'Zelda', description: 'Developer'},
        {name: 'Luide', description: 'Developer'},
        {name: 'Mario', description: 'Developer'}
    ];
});
然后,您可以将其注入到控制器中,并输入上面的代码:

.state('add', {
        url: '/add',
        templateUrl: 'edit.html',
        controller: function($scope, $state, People) {
            $scope.person = {name: "", description: ""};

            $scope.click = function () {
                //use persons object of people service.
                People.persons.push($scope.person);
                $state.go('list');
            };
        }
    });

});
您可以通过依赖项注入在不同的控制器、服务和指令之间共享这些人员。例如,列表控制器MyCtrl的外观如下所示:

app.controller('MyCtrl', function ($scope, People) {
    $scope.persons = People.persons;
});
如果您对列表进行编辑和添加子路由,则只需将人员设置为解析。然后,所有子路由都可以将其注入。