2016-04-09 4 views
0

Используя ионный, я пытаюсь использовать случай использования для выбора из списка и вернуться к исходному виду с некоторым значением. Я уже выполнил большую часть части, кроме обнаружения, что она вернулась к исходному виду и передала значение обратно в исходное представление.

Вот до сих пор, что i'ved достигнуто:

кнопку, которая идет к списку

<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'); 
} 

вид со списком, когда пресса выполняет действие в выбранном ряду

<ion-item collection-repeat="unit in units" class="item item-icon-right item-icon-left" ng-click="selectUnit(unit.id)"> 

по выбору строки он возвращается к первоначальному виду с $ ionicHistory.goBack()

$scope.selectUnit = function(unit_id){ 
    console.log('performselectUnit:' + unit_id); 

    $ionicHistory.goBack(); 
} 

Из последней функции, как обнаружить его вернулись к первоначальному виду и передать какую-то ценность.

Спасибо.

ОБНОВЛЕНИЕ: Я пробовал это.

Broadcast результат

$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; 
}); 

, но никогда не был обновлен в представлении

<label class="item item-text-wrap"> 
    <button class="button button-block button-outline button-positive" ng-click="performselectUnit()"> Select Unit 
    </button> 
    {{showSelectedUnit}} 
</label> 

Как я могу получить его, чтобы обновить в представлении? или есть лучший способ

+0

может понравиться создать скрипку для этого?это легко воспроизвести проблему. Тем временем попробуйте вызвать '$ scope.apply();' после '$ scope.showSelectedUnit = args.data;', см., Что works (y) – pradeep1991singh

+0

im, что он работает с $ stateParams, таким образом он пройдет. позвольте мне сделать некоторые тесты по этому поводу. – Axil

ответ

0

Вы можете использовать паб-суб сервис для обмена информации между двумя Ctrl

fiddle demo

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); 
} 
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.

1

Столкнувшись с точно такой же вопрос, я мог бы заставить его работать, переключая порядок вызовов GoBack и вещания:

$rootScope.$broadcast('selected-unit', { data: unit_id }); 
    $ionicHistory.goBack(); 

 Смежные вопросы

  • Нет связанных вопросов^_^