在创建$ ionicModal时使用'this'作为范围

spe*_*z86 13 modal-dialog angularjs angularjs-scope ionic-framework

我似乎$ionicModal在尝试指定我的范围时创建了一个问题,this而不是$scope.

因为我通过实例名称绑定了控制器中的所有内容,所以我没有$scope在控制器内部使用.

于是,我开始模式如下指示在离子框架文档 和交换$scopethis

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

当应用程序运行时,我收到以下错误:

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);
Run Code Online (Sandbox Code Playgroud)

我甚至尝试分配另一个变量来表示this和运行它,但同样的错误占上风!

如果我没有$scope在我的控制器中使用,那么在保持使用状态的同时加载模态的最佳方法是this什么?这是不可能还是我错过了什么?

编辑 - 根据要求,添加更多信息到原件,

模板:

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

控制器:

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;
      });
});
Run Code Online (Sandbox Code Playgroud)

所以,基本上,我使用的是第一个声明样式:https: //docs.angularjs.org/api/ng/directive/ngController

编辑:改变this_this内部$ionicModal

根据要求,这里有一个上面代码的plunker:http://plnkr.co/edit/4GbulCDgoj4iZtmAg6v3?p = info

Jos*_*seM 24

由于AngularJs在使用"控制器为"语法时当前如何设置控制器,因此您只能拥有自己在控制器功能中定义的任何功能和属性.为了访问AngularJs提供的用于创建子作用域的$ new()函数,您需要提供一个AngularJs $scope对象 - 即使使用"controller as"语法,它仍然可以通过将其注入构造函数来获得. .

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;
  });
});
Run Code Online (Sandbox Code Playgroud)