2015-10-09 3 views
9

Я действительно новичок в Angular. Я пытаюсь воссоздать образец модели по этой ссылке https://angular-ui.github.io/bootstrap/ Мне не повезло с этим! Я создал плунжер http://plnkr.co/edit/018Ed7RG3Y0GoAlK7a14?p=catalogue Мне нужно только открыть модальное нажатие кнопки. Я получаю сообщение об ошибке Error: [нг: areq] Аргумент 'ModalDemoCtrl' не является функцией, был неопределеннымAngularJS Modal Popup

Вот мой взгляд

<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> 

Вот мой контроллер:

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

ваш plunkr сломана. –

+0

@PankajParkar извините за это. Я поместил код в файл index.html. Вы должны уметь это видеть сейчас. – hollyquinn

+0

вам нужно включить 'angular.js & ui-bootstrap.js' перед вашим' script.js' –

ответ

8

Вот исправленный вилка вашего шлепнуть: http://plnkr.co/edit/6djuhA8ohMkrWW7zohg1?p=preview. У вас были небольшие ошибки синтаксиса.

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

Я изменил свой код в соответствии с вашим. Я все равно не получаю ошибок, но если я добавлю свой контроллер на страницу index.html, он возвращается без ошибок и пустой страницы. Любая идея, что я делаю неправильно? – hollyquinn

+0

@hollyquinn, Вы получили эту работу? Извините, я был на несколько дней для медицинского лечения. – steveo

5

Вы должны исправить эту строку:

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

Правильный код:

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

У вас есть аналогичная проблема с ModalInstanceCtrl.

Вы также не указали атрибут ng-app="crm.ma".

Демо:http://plnkr.co/edit/VDhDAHM2beVtYYsJBXoi?p=preview

+0

Я исправил строку кода, но он все еще не работает. ng-app включен в мое фактическое приложение. Это огромное приложение, я просто добавил страницы, на которых у меня есть вопрос о Plunker. – hollyquinn

+0

Какая ошибка у вас? – dfsq

+0

ReferenceError: ModalInstanceCtrl не определен (анонимная функция) @ ModalDemoCtrl.js: 36 angular.js: 68 Ошибка при отсутствии: [$ injector: modulerr] Не удалось создать модуль crm.ma из-за: Ошибка: [$ injector: modulerr ] Не удалось создать модуль ngAnimate из-за: Ошибка: [$ injector: nomod] Модуль 'ngAnimate' недоступен! Вы либо ошибочно написали имя модуля, либо забыли загрузить его. Если регистрация модуля гарантирует, что вы укажете зависимости в качестве второго аргумента. Спасибо за вашу помощь! – hollyquinn