Подтвердить что ты не робот

Использование 'this as scope при создании $ionicModal

Кажется, у меня проблема с созданием $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 не является функцией

и он ссылается на следующий код в 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? Это просто невозможно или я что-то не хватает?

ИЗМЕНИТЬ - По запросу, добавив дополнительную информацию к оригиналу,

Шаблон:

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

Итак, в основном, я использую первый стиль объявления, найденный здесь: https://docs.angularjs.org/api/ng/directive/ngController

EDIT: изменено this на _this внутри $ionicModal

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

4b9b3361

Ответ 1

Из-за того, как 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;
  });
});