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

Angular -ui modal с контроллером как синтаксис

Я использую angular -ui-bootstrap-bower # 0.7.0 с angular # 1.2.10 и при открытии модальности, когда контроллер является "старомодным", все работает нормально.

Однако, когда у меня есть контроллер, предназначенный для использования с новым "контроллером как синтаксис", он не работает. angular -ui-bootstrap modal работает с контроллером как синтаксис? Поддерживает ли версия 0.7? Как это сделать?

4b9b3361

Ответ 1

Вы можете использовать синтаксис ngController для опции "controller". Например:

controller: 'modalController as modal'

Существует образец plunker

Код из плункера:

<!DOCTYPE html>
<html>

  <head>
    <link data-require="[email protected]" data-semver="3.1.1" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
    <script data-require="[email protected]" data-semver="1.2.16" src="https://code.angularjs.org/1.2.16/angular.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.11.0/ui-bootstrap-tpls.js"></script>
    <script src="script.js"></script>
  </head>

  <body ng-app="app" ng-controller="demoController as demo">
    <h1>{{ demo.message }}</h1>

    <button class="btn btn-primary" ng-click="demo.modal()">Open modal</button>

    <script type="text/ng-template" id="modal.html">
      <div class="modal-header">
        <h3 class="modal-title">Modal window</h3>
      </div>
      <div class="modal-body">
        <pre>{{ modal.modalText }}</pre>
      </div>
      <div class="modal-footer">
        <button class="btn btn-default" ng-click="modal.cancel()">Cancel</button>
      </div>
    </script>

  </body>

</html>

script.js

angular.module('app', ['ui.bootstrap'])
.controller('demoController', function($modal) {
  this.message = 'It works!'
  this.modal = function() {
    $modal.open({
      controller: 'modalController as modal',
      templateUrl: 'modal.html'
    });
  };
})
.controller('modalController', function($modalInstance) {
  this.modalText = 'Modal Text'
  this.cancel = function() {
    $modalInstance.dismiss();
  }
})

Ответ 2

Если вы используете CoffeeScript, не забудьте явно указать return функцию контроллера.

В противном случае последняя строка будет возвращена, и в итоге вы получите неработающий синтаксис controller as и, кстати, на этой странице SO.

Ответ 3

Задайте свойство 'controllerAs' в $uibModal.open()

var modalInstance = $uibModal.open({
    animation:true,
    templateUrl: '_myModal.html',
    controller:['$scope' function($scope){
    var mdCtrl=this;
    mdCtrl.title="hello world";
    }],
    controllerAs:'mdCtrl', //set your custom controllerAs name
    backdrop: 'static',
    size: 'lg',
    resolve: {
    }
    });
    modalInstance.result.then(function (selectedItem) {
    }, function () {
    });

в вашем шаблоне

    <h2> {{mdCtrl.title}}</h2>