使用ionic,我试图让一个用例从列表中选择并返回原始视图并带有一些值。除了检测到它已经返回到原始视图并将值传回原始视图之外,我已经完成了大部分工作。
到目前为止,我已经完成了以下任务:
按钮转到列表
var wallNormalAngle = wallAngle-PI/2; // assuming clockwise angle calculations
var differenceAngle = incidenceAngle - wallNormalAngle;
var reflectionAngle = incidenceAngle + 2 * differenceAngle
这是使用列表
转到新视图的触发器 <button class="button button-block button-outline button-positive" ng-click="performselectUnit()"> Select Unit
</button>
当按下对所选行执行操作时带有列表的视图
$scope.performselectUnit = function(){
console.log('performselectUnit');
$state.go('app.units');
}
在选择行时,使用$ ionicHistory.goBack()返回原始视图
<ion-item collection-repeat="unit in units" class="item item-icon-right item-icon-left" ng-click="selectUnit(unit.id)">
从最后一个函数开始,如何检测它返回到原始视图并传递一些值。
感谢。
更新: 我试过这个。
广播结果
$scope.selectUnit = function(unit_id){
console.log('performselectUnit:' + unit_id);
$ionicHistory.goBack();
}
在原始视图控制器中捕获事件和结果。
$scope.selectUnit = function(unit_id){
console.log('performselectUnit:' + unit_id);
$ionicHistory.goBack();
$rootScope.$broadcast('selected-unit', { data: unit_id });
}
但它从未在视图中更新
$rootScope.$on('selected-unit', function(event, args) {
console.log("received selected-unit" + args.data);
$scope.showSelectedUnit = args.data;
});
如何在视图中更新它?还是有更好的方法
答案 0 :(得分:1)
面对完全相同的问题,我可以通过将调用顺序切换为goBack和广播来使其工作:
$rootScope.$broadcast('selected-unit', { data: unit_id });
$ionicHistory.goBack();
答案 1 :(得分:0)
您可以使用pub-sub服务在两个ctrl之间共享信息
function MyCtrl($scope, datasharer) {
$scope.sharedData = datasharer.getSharedData();
$scope.send = function() {
datasharer.setSharedData($scope.name);
}
}
function My2Ctrl($scope, datasharer) {
function getSendData(data) {
console.log(data);
$scope.sharedData = data;
}
datasharer.registerForSharedData(getSendData);
}
答案 2 :(得分:0)
使用$rootScope.$broadcast
和$rootScope.$on
确实可以解决您的问题,只需在$scope.$apply
中使用$rootScope.$on
:
$rootScope.$on('selected-unit', function(event, args) {
console.log("received selected-unit" + args.data);
$scope.$apply(function() {
$scope.showSelectedUnit = args.data;
});
});
更重要的是,$rootScope.$broadcast
总是很昂贵,所以你可以试试$rootScope.$emit
。有关角度事件的更多信息,请参阅https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
但更优雅的解决方案是使用Service
在控制器之间共享数据,您可以参考Share data between AngularJS controllers。