AngularJS:在angular-ui路由器中的状态之间共享控制器

时间:2015-03-05 22:04:54

标签: angularjs angular-ui-router ionic-framework

我的离子应用程序中有这些router.js,

myapp.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider

  .state('app', {
    url: "/app",
    abstract: true,
    templateUrl: "templates/menu.html",
    controller: 'AppCtrl'
  })

     .state('app.myprofile', {
    url: "/myprofile",
       abstract: true,
    views: {
      'menuContent': {
          controller : "myprofileCtrl",
        templateUrl: "templates/myprofile.html"
      }
    }
  })
       .state('app.myprofile.info', {
    url: "/info",
 controller: "profileinfoCtrl",

        templateUrl: "templates/profile/info.html"

  })
        .state('app.myprofile.location', {

    url: "/location",
 controller: "profilelocationCtrl",

        templateUrl: "templates/profile/location.html"

  })


  $urlRouterProvider.otherwise('/');
});

我需要一种在myprofile状态和myprofile.location状态以及myprofile.info状态之间共享控制器范围的方法。

我正在使用离子框架

myprofileCtrl中的

       myapp.controller("myprofileCtrl",function($scope,Authy ,Auth,$http ,$rootScope){
                  $scope.view_loading = true;
                   Authy.can_go().then(function(data){
$scope.profile =data.profile;

});
});
在profilelocationCtrl中

 myapp.controller("profilelocationCtrl",function($scope,Authy ,Auth,$http ,$rootScope){
     console.log($scope.profile);

});

我在控制台中未定义

1 个答案:

答案 0 :(得分:0)

我认为问题是因为$scope.profile是在ajax调用之后设置的,所以当最初达到myprofile.location状态时,父资格$scope上的配置文件变量仍未定义,你可以做的是$watch个人资料变量,或者更好的是当你使用$broadcast从服务器通话收到它时向下广播一个事件。

$broadcast将事件向下发送到所有子范围,因此您可以这样做:

myapp.controller("myprofileCtrl",function($scope,Authy ,Auth,$http ,$rootScope){
     $scope.view_loading = true;
     Authy.can_go().then(function(data){
        $scope.profile =data.profile;
        $scope.$broadcast('profileSet', data.profile);
     });
});

并在myprofile.location`状态:

myapp.controller("profilelocationCtrl",function($scope,Authy,Auth,$http,$rootScope){
      $scope.$on('profileSet', function(event, data) { 
          console.log(data);
        });
      }

});

看看我刚刚制作的this演示插件。