AngularJS $播放$ on在第一时间没有工作 - 间歇性问题

时间:2015-05-12 06:53:07

标签: angularjs

我的AngularJS应用程序中存在一种奇怪的行为。用于在" usercreate.html"创建用户的用例并且在成功创建(通过Backend REST-服务 - > HTTP POST)后,重定向到" usercreateresponse.html"是的。

我有两个控制器:

  1. usercreate.html - > CreateUserController
  2. usercreateresponse.html - > CreateUserResponseController
  3. 我在CreateUserControllerCreateUserResponseController以及$rootScope.$broadcast之间共享$rootScope.$onfunction CreateUserController($scope, CreateUserService) { $scope.createUser = function(data) { CreateUserService.createUser($scope.usernameCreate, $scope.passwordCreate, $scope.role); } } services.factory('CreateUserService', function($rootScope, $location, $http) { ... var res = $http.post('/users/createUser', dataObj); res.success(function(data, status, headers, config) { $rootScope.$broadcast('handleCreatedUser', {usernameCreate: data.username, passwordCreate: data.password, role: data.roles}); $location.path("usercreateresponse"); }); res.error(function(data, status, headers, config) { ... }); } return sharedCreateUserService; }); function CreateUserResponseController($rootScope) { $rootScope.$on('handleCreatedUser', function(event, args) { $rootScope.usernameCreated = args.usernameCreate; $rootScope.passwordCreated = args.passwordCreate; $rootScope.role = args.role[0]; }); } 之间的数据。

    我现在的问题是,当我在代码中更改某些内容(AngularJS代码)并刷新浏览器页面后,我将创建一个用户,用户创建工作正常,我也被重定向到usercreateresponse.html但是没有显示任何值 - >但这只是第一次 - >如果我导航回usercreate.html并再次创建一个用户,一切正常。

    我发现如果它不能正常工作,则会使用HTTP GET从后端获取HTML代码。如果它工作,只有HTTP POST,一切正常。

    HTTP Stack

    有人知道如何阻止第一次创建用户 - >重定向问题?

    这里是控制器/服务:

    NSMutableDictionary *sendData = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                         [NSNumber numberWithInt:-10], @"value1",
                                         [NSNumber numberWithInt:10], @"value2", nil];
    
    
        NSError *error = nil;
        NSData *dataJSon = [NSJSONSerialization dataWithJSONObject:sendData options:0 error:&error];
        NSLog(@"sendData\n %@ \n\n", [sendData objectForKey:@"value1"]);
    

1 个答案:

答案 0 :(得分:0)

您可以使用一种服务来代替广播,该服务将存储创建用户的响应。然后,您可以使用CreateUserResponseController的服务共享它。对于广播事件,可能发生的事情是,您在实例化处理它的控制器之前广播事件。因此,$ on可能尚未注册。因此,你面临的问题。