2015-10-09 13 views
9

Sono davvero nuovo per Angular. Sto cercando di ricreare l'esempio modale a questo link https://angular-ui.github.io/bootstrap/ Non ho fortuna con esso! Ho creato un plunker http://plnkr.co/edit/018Ed7RG3Y0GoAlK7a14?p=catalogue Ho solo bisogno di essere in grado di aprire una modale su un clic del pulsante. Sto ottenendo l'errore messaggio di errore: [ng: areq] Argomento 'ModalDemoCtrl' non è una funzione, ma ho undefinedAngularJS Modal Popup

Ecco la mia vista

<div ng-controller="ModalDemoCtrl"> 
<script type="text/ng-template" id="myModalContent.html"> 
    <div class="modal-header"> 
     <h3 class="modal-title">I'm a modal!</h3> 
    </div> 
    <div class="modal-body"> 
     <ul> 
      <li ng-repeat="item in items"> 
       <a href="#" ng-click="$event.preventDefault(); selected.item = item">{{ item }}</a> 
      </li> 
     </ul> 
     Selected: <b>{{ selected.item }}</b> 
    </div> 
    <div class="modal-footer"> 
     <button class="btn btn-primary" type="button" ng-click="ok()">OK</button> 
     <button class="btn btn-warning" type="button" ng-click="cancel()">Cancel</button> 
    </div> 
</script> 
<button type="button" class="btn btn-default" ng-click="open()">Open me!</button> 
<button type="button" class="btn btn-default" ng-click="open('lg')">Large modal</button> 
<button type="button" class="btn btn-default" ng-click="open('sm')">Small modal</button> 
<button type="button" class="btn btn-default" ng-click="toggleAnimation()">Toggle Animation ({{ animationsEnabled }})</button> 
<div ng-show="selected">Selection from a modal: {{ selected }}</div> 

Ecco il mio controllo:

angular.module('crm.ma', ['ngAnimate', 'ui.bootstrap']); 
angular.module('crm.ma').controller('ModalDemoCtrl', ModalDemoCtrl, function ($scope, $uibModal, $log) { 

$scope.items = ['item1', 'item2', 'item3']; 

$scope.animationsEnabled = true; 

$scope.open = function (size) { 

    var modalInstance = $uibModal.open({ 
     animation: $scope.animationsEnabled, 
     templateUrl: 'myModalContent.html', 
     controller: 'ModalInstanceCtrl', 
     size: size, 
     resolve: { 
      items: function() { 
       return $scope.items; 
      } 
     } 
    }); 

    modalInstance.result.then(function (selectedItem) { 
     $scope.selected = selectedItem; 
    }, function() { 
     $log.info('Modal dismissed at: ' + new Date()); 
    }); 
}; 

$scope.toggleAnimation = function() { 
    $scope.animationsEnabled = !$scope.animationsEnabled; 
}; 

});

angular.module('crm.ma').controller('ModalInstanceCtrl', ModalInstanceCtrl, function ($scope, $modalInstance, items) { 

$scope.items = items; 
$scope.selected = { 
    item: $scope.items[0] 
}; 

$scope.ok = function() { 
    $modalInstance.close($scope.selected.item); 
}; 

$scope.cancel = function() { 
    $modalInstance.dismiss('cancel'); 
}; 
}); 
+0

tua plunkr è rotto. –

+0

@PankajParkar mi dispiace per quello. Inserisco il codice nel file index.html. Dovresti essere in grado di vederlo ora. – hollyquinn

+0

è necessario includere 'angular.js e ui-bootstrap.js' prima di' script.js' –

risposta

8

Ecco una forchetta corretto del vostro Plunk: http://plnkr.co/edit/6djuhA8ohMkrWW7zohg1?p=preview. Hai appena avuto alcuni errori di sintassi minori.

JAVASCRIPT

var app = angular.module('crm.ma', ['ngAnimate', 'ui.bootstrap']); 

app.controller('ModalDemoCtrl', function ($scope, $uibModal, $log) { 

$scope.items = ['item1', 'item2', 'item3']; 

$scope.animationsEnabled = true; 

$scope.open = function (size) { 

    var modalInstance = $uibModal.open({ 
     animation: $scope.animationsEnabled, 
     templateUrl: 'myModalContent.html', 
     controller: 'ModalInstanceCtrl', 
     size: size, 
     resolve: { 
      items: function() { 
       return $scope.items; 
      } 
     } 
    }); 

    modalInstance.result.then(function (selectedItem) { 
     $scope.selected = selectedItem; 
    }, function() { 
     $log.info('Modal dismissed at: ' + new Date()); 
    }); 
}; 

    $scope.toggleAnimation = function() { 
    $scope.animationsEnabled = !$scope.animationsEnabled; 
    }; 

}); 

// Please note that $modalInstance represents a modal window (instance) dependency. 
// It is not the same as the $uibModal service used above. 

app.controller('ModalInstanceCtrl', function ($scope, $modalInstance, items) { 

    $scope.items = items; 
    $scope.selected = { 
    item: $scope.items[0] 
    }; 

    $scope.ok = function() { 
    $modalInstance.close($scope.selected.item); 
    }; 

    $scope.cancel = function() { 
    $modalInstance.dismiss('cancel'); 
    }; 
}); 

HTML

<!DOCTYPE html> 
<html data-ng-app="crm.ma"> 

<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" /> 
<link rel="stylesheet" href="style.css" /> 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular-animate.js"></script> 
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.14.0.js"></script> 
<script src="ModalDemoCtrl.js"></script> 
</head> 

<body> 
    <div ng-controller="ModalDemoCtrl"> 
    <script type="text/ng-template" id="myModalContent.html"> 
     <div class="modal-header"> 
      <h3 class="modal-title">I'm a modal!</h3> 
     </div> 
     <div class="modal-body"> 
     <ul> 
      <li ng-repeat="item in items"> 
       <a href="#" ng-click="$event.preventDefault(); selected.item = item">{{ item }}</a> 
      </li> 
     </ul> 
     Selected: <b>{{ selected.item }}</b> 
     </div> 
     <div class="modal-footer"> 
     <button class="btn btn-primary" type="button" ng-click="ok()">OK</button> 
     <button class="btn btn-warning" type="button" ng-click="cancel()">Cancel</button> 
     </div> 
    </script> 
    <button type="button" class="btn btn-default" ng-click="open()">Open me!</button> 
    <button type="button" class="btn btn-default" ng-click="open('lg')">Large modal</button> 
    <button type="button" class="btn btn-default" ng-click="open('sm')">Small modal</button> 
    <button type="button" class="btn btn-default" ng-click="toggleAnimation()">Toggle Animation ({{ animationsEnabled }})</button> 
    <div ng-show="selected">Selection from a modal: {{ selected }}</div> 
    </div> 
    </body> 

</html> 
+0

Ho cambiato il mio codice per abbinare il tuo. Non ricevo ancora errori, ma se aggiungo il mio controller alla pagina index.html, viene restituito senza errori e una pagina vuota. Qualche idea su cosa sto facendo male? – hollyquinn

+0

@hollyquinn, hai funzionato? Scusa, sono stato fuori per qualche giorno per un medico. – steveo

5

devi correggere questa linea:

angular.module('crm.ma').controller('ModalDemoCtrl', ModalDemoCtrl, function ($scope, $uibModal, $log) {  
// what is this, huh? ------------------------------------^ 

codice corretto:

angular.module('crm.ma').controller('ModalDemoCtrl', function ($scope, $uibModal, $log) { 

Hai problema simile con ModalInstanceCtrl.

Manca anche l'attributo ng-app="crm.ma".

Demo:http://plnkr.co/edit/VDhDAHM2beVtYYsJBXoi?p=preview

+0

Ho corretto la riga di codice, ma ancora non funziona. ng-app è inclusa nella mia applicazione reale. Questa è un'applicazione enorme, ho appena aggiunto le pagine su cui ho una domanda su Plunker. – hollyquinn

+0

Che errore ottieni? – dfsq

+0

ReferenceError: ModalInstanceCtrl non definito (funzione anonima) @ ModalDemoCtrl.js: 36 angular.js: 68 Errore non rilevato: [$ injector: modulerr] Impossibile istanziare il modulo crm.ma a causa di: Errore: [$ injector: modulerr ] Impossibile istanziare il modulo ngAnimate a causa di: Errore: [$ injector: nomod] Module 'ngAnimate' non è disponibile! Hai sbagliato a scrivere il nome del modulo o hai dimenticato di caricarlo. Se si registra un modulo, assicurarsi di specificare le dipendenze come secondo argomento. Grazie per l'aiuto! – hollyquinn