2014-09-15 3 views
13

У меня, похоже, проблема с созданием $ionicModal при попытке указать мою область как this вместо $scope.

Поскольку я привязываю все в своем контроллере через имя экземпляра, я не использую $scope внутри контроллера.

Итак, я начинаю модальный, как указано здесь, в Ionic Framework doc и переключился $scope с this

$ionicModal.fromTemplateUrl('my-modal.html', { 
    scope: this, 
    animation: 'slide-in-up' 
    }).then(function(modal) { 
    this.modal = modal; 
    }); 

При запуске приложения, я получаю следующее сообщение об ошибке:

undefined is not a function

и ссылается на следующий код в ionic.bundle.js:

var createModal = function(templateString, options) { 
    // Create a new scope for the modal 
    var scope = options.scope && options.scope.$new() || $rootScope.$new(true); 

Я даже попытался назначить другую переменную для представления this и запустить ее таким образом, но та же ошибка превалирует!

Если я не использую $scope в моем контроллере, какой бы лучший способ загрузить модальный код, поддерживая использование this? Это просто невозможно, или я чего-то не хватает?

Edit- В соответствии с просьбой, добавив больше информации к оригиналу,

Шаблон:

<div id="wrapper" ng-controller="MainCtrl as ctrl"> 
<button ng-click="ctrl.demo()">Demo Button</button> 
</div> 

Контроллер:

angular.module('MyDemo', ['ionic']) 
.controller('MainCtrl', function ($ionicModal) { 
var _this = this; 
this.demo = function() { 
//do demo related stuff here 
} 

$ionicModal.fromTemplateUrl('my-modal.html', { 
     scope: _this, 
     animation: 'slide-in-up' 
     }).then(function(modal) { 
     _this.modal = modal; 
     }); 
}); 

Так, в принципе, я используя 1-й де- Декларации в стиле здесь: https://docs.angularjs.org/api/ng/directive/ngController

EDIT: Изменены this к _this внутри $ionicModal

В соответствии с просьбой, вот plunker с указанным кодом: http://plnkr.co/edit/4GbulCDgoj4iZtmAg6v3?p=info

+0

Я не уверен, что вы подразумеваете под «Поскольку я связыванием все в моем контроллере через имя экземпляра», вы можете показать нам больше ваш код контроллера или даже лучше, образец plunker где ошибок имеет место? – JoseM

+0

Добавлена ​​дополнительная информация к оригиналу. Я думаю, вопрос в том, может ли это использовать вместо $ scope при настройке модального. – spez86

+0

Вы пытались присвоить 'this' самому себе?Например, 'var self = this;' затем используйте 'scope: self' – JoseM

ответ

24

Из-за того, как AngularJs в настоящее время настраивает контроллер при использовании синтаксиса «контроллер как» у вас есть только те функции и свойства, которые вы сами определяете в функции контроллера. Чтобы получить доступ к функции $new(), которую AngularJs предоставляет для создания дочерних областей, вам необходимо предоставить объект AngularJs $scope, который вы все равно можете получить, введя его в свою конструкторскую функцию даже при использовании синтаксиса «контроллер как».

angular.module('MyDemo', ['ionic']) 
.controller('MainCtrl', function ($scope, $ionicModal) { 
    var _this = this; 
    this.demo = function() { 
    //do demo related stuff here 
    } 

    $ionicModal.fromTemplateUrl('my-modal.html', { 
    scope: $scope, 
    animation: 'slide-in-up' 
    }).then(function(modal) { 
    _this.modal = modal; 
    }); 
}); 
+0

Я также разместил этот вопрос на ионном форуме и получил тот же ответ, но этот еще проще. Спасибо, что помогли мне пройти через это вчера, очень ценили! – spez86

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