2015-02-04 3 views
3

Я делаю ионный + angularJs приложение, для Android, чтобы быть конкретным. Я не знаю, почему, но в моем названный так homeController, всякий раз, когда я пытался вызвать функцию, чтобы показать мне $ionicModal, он дает мне ошибку ...Ионный Модал не открывается (TypeError: Не удается прочитать свойство 'show' of undefined)?

TypeError: Cannot read property 'show' of undefined at Scope.$scope.openModal (homeModule.js:18) at new (homeModule.js:59) at Object.invoke (ionic.bundle.js:11994) at $get.extend.instance (ionic.bundle.js:16247) at ionic.bundle.js:15502 at forEach (ionic.bundle.js:8155) at nodeLinkFn (ionic.bundle.js:15501) at compositeLinkFn (ionic.bundle.js:14887) at publicLinkFn (ionic.bundle.js:14766) at IonicModule.controller.self.appendViewElement (ionic.bundle.js:47324)

Мой контроллер выглядит следующим образом (начало из него):

app.controller('homeController', function($scope, $ionicPopup, $state, $ionicLoading, $rootScope, $ionicModal, mapFactory){ 
    // Load the modal from the given template URL 
    $ionicModal.fromTemplateUrl('templates/loginModal.html', function($ionicModal) { 
     $scope.modal = $ionicModal; 
     console.log($scope.modal); 
    }, { 
     scope: $scope, 
     animation: 'slide-in-up', 
     backdropClickToClose: false, 
     hardwareBackButtonClose: false, 
     focusFirstInput: true 
    }); 
    $scope.openModal = function() { 
     $scope.modal.show(); 
    }; 
    $scope.closeModal = function() { 
     $scope.modal.hide(); 
    }; 

Я уже пробовал много разных способов, чтобы сделать модальное открытым, самое смешное, когда я иду в новое $ состоянии, и вернуться назад, он открывает ... Но не тогда, когда Я обновляю страницу. Кроме того, я сделал console.log($scope.modal), чтобы увидеть, если моя переменная была быть установлена, и результат был:

ionic.Utils.inherit.child {focusFirstInput: true, unfocusOnHide: true, focusFirstDelay: 600, backdropClickToClose: false, hardwareBackButtonClose: false…}$el: JQLite[1]animation: "slide-in-up"backdropClickToClose: falseel: div.modal-backdropfocusFirstDelay: 600focusFirstInput: truehardwareBackButtonClose: falsemodalEl: ion-modal-view.modalscope: ChildScopeunfocusOnHide: trueviewType: "modal"__proto__: ionic.Utils.inherit.Surrogate 

Может кто-нибудь, пожалуйста, помогите мне в этом? Заранее спасибо.

ответ

3

Ошибка означает $scope.modal не был создан - вы звоните в fromTemplateUrl не в порядке. Второй параметр - это модальные параметры, и вы передаете обратный вызов.

Документация содержит good example.

В вашем случае, вызов fromTemplateUrl должен выглядеть следующим образом:

$ionicModal.fromTemplateUrl('templates/loginModal.html', { 
    scope: $scope, 
    animation: 'slide-in-up', 
    backdropClickToClose: false, 
    hardwareBackButtonClose: false, 
    focusFirstInput: true 
}).then(function(modal) { 
    $scope.modal = modal; 
    console.log($scope.modal); 
}); 
+0

Я сделал, как вы сказали, но, к сожалению, это не сработало ... Я как бы новичок на ионике, но из того, что знаю, и документации, которую я видел, это правильно ... Но все же, это показывает, что «Невозможно прочитать свойство« показать »неопределенного» ... Может быть, это имеет какое-то отношение к AngularJS? Я использую ionic.bundle.js ... И все же, console.log показывает мне модальный определенный, но я не могу открыть его –

+0

Я думаю, что нашел временное решение, так как я не думаю, что это лучшая практика. .. Я получил $ ionicModal, чтобы открыть, пока я все еще определял его, внутри его функции ... Но я не знаю, лучше ли это делать –

+0

У меня была аналогичная проблема, потому что у меня не было добавить плагин: плагин cordova добавить https://github.com/VitaliiBlagodir/cordova-plugin-datepicker.git –

0

Я думаю, что я нашел исправить. Я пытался открыть модальный изнутри оператора «if», как только я снял его с «if», он работал отлично. В любом случае, спасибо, Брэд.

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