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

时间:2014-09-15 18:24:19

标签: angularjs modal-dialog angularjs-scope ionic-framework

在尝试将我的范围指定为$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

编辑:将this更改为_this内的$ionicModal

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

1 个答案:

答案 0 :(得分:24)

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

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