Angularjs 使用$routeProvider时如何传递变量

Angularjs 使用$routeProvider时如何传递变量,angularjs,Angularjs,我正在使用$routeProvider创建一个单页应用程序,用户按continue进入下一步。每当用户单击“继续”时,将变量传递到下一页是很重要的,因此我遵循了一些建议,创建了自己的具有持久变量的服务。这一切都很好,除了我只能从服务中获取变量,我不知道如何更新变量。这是我的密码: myApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/pic

我正在使用$routeProvider创建一个单页应用程序,用户按continue进入下一步。每当用户单击“继续”时,将变量传递到下一页是很重要的,因此我遵循了一些建议,创建了自己的具有持久变量的服务。这一切都很好,除了我只能从服务中获取变量,我不知道如何更新变量。这是我的密码:

myApp.config(['$routeProvider',
    function($routeProvider) {
        $routeProvider.
            when('/pick_categories', {
                templateUrl: '/pick_categories.html',
                controller: 'MeetupDataCtrl'
            }).
            when('/pick_times', {
                templateUrl: '/pick_times.html',
                controller: 'MeetupDataCtrl'
            }).
            when('/events', {
                templateUrl: '/events.html',
                controller: 'MeetupDataCtrl'
            }).
            otherwise({
                redirectTo: '/pick_categories'
            });
    }]);

myApp.service("meetupService", function(){
    this.checked_categories = [];
});

myApp.controller('MeetupDataCtrl', ['$scope', '$http', '$location', '$resource', 'meetupService', function MeetupDataCtrl($scope, $http, $location, $resource, meetupService) {
    $scope.checked_categories = meetupService.checked_categories;
}]);
然后在视图中,我检查了绑定到输入字段的\u类别


我知道问题是我在init上获取服务的变量,但在我更改路由后,我不会从作用域更新服务的变量。有什么办法可以帮你吗?(或者如果有其他最佳实践)

您实际上可以直接更改服务属性…:

meetupService.checked_categories.push({ something: 'something'});
。。。但最好封装服务的状态属性,以便您可以从控制器执行以下操作:

meetupService.addCategory('theCheckedCategory');
请记住,服务在角度上是单例的;在您的Angular应用程序中只有一个meetupService。这意味着,一旦用户以某种方式修改了checked_categories数组,他们将拥有该数组,直到他们刷新/重新加载您的网站

还要注意的是,在大多数情况下,在构建单页应用程序时,通过url参数传递状态信息是不必要的

这听起来像是你试图构建一个向导,如果我猜对了,你不需要上面的任何东西。向导实际上很容易在Angular中创建,因为所有的状态信息都被保留。。。好吧,只要你愿意

有关简单的向导示例,请参见

编辑:

哦,如果你真的需要把参数传递给路由,你可以用内置的


用户在输入框中插入数据后,范围将更新,然后在控制器中,您必须通过服务中的函数更新
选中的\u类别
。如果
$scope.选中的\u类别
正在修改,则更改应持续到使用该服务的其他路由。你能发布它是如何绑定到一个输入字段的吗?理想情况下,一个Plunker会显示它不工作吗?+1表示文章的后半部分和Plunker。这正是我需要的
// change the path
$location.path('/newValue')

// change the query string / url arguments
$location.search({myArg: 'value', myOtherArg: 'anotherValue'});