我的离子应用程序中有这些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);
});
我在控制台中未定义
答案 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演示插件。