J'utilise ces paquets: Un modal angularjs du paquet angular-ui: http://angular-ui.github.io/bootstrap/#/modal And Angular-flexslider à partir d'ici: https: // github. com/EnthusiasticCode/angular-flexslider
Chaque plugin fonctionne bien quand ils sont dans des pages séparées. mais quand je les utilise dans une page, angular-flexslider provoque une erreur:
Error: [$compile:multidir] Multiple directives [flexSlider, slide] asking for transclusion on: <div class="flexslider-container ng-isolate-scope ng-scope" slide="s in slides" animation="slide">
http://errors.angularjs.org/1.2.0-rc.2/$compile/multidir?p0=flexSlider&p1=s…20ng-scope%22%20slide%3D%22s%20in%20slides%22%20animation%3D%22slide%22%3E
at ...
Le fichier modèle est ceci:
<flex-slider slide="s in slides" animation="slide">
<li>
<img ng-src="{{s}}">
</li>
</flex-slider>
<div ng-controller="ModalDemoCtrl">
<script type="text/ng-template" id="myModalContent.html">
<h3>I'm a modal!</h3>
</script>
<button class="btn" ng-click="open()">Open me!</button>
</div>
Et le fichier app.js:
angular.module('theApp', ['theApp.filters', 'theApp.services', 'theApp.directives', 'theApp.controllers', 'ngRoute', 'ngSanitize', 'angular-flexslider', 'ui.bootstrap']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/home', {templateUrl: (someurl...) , controller: (a name ...) });
}]);
Le fichier controller.js est:
angular.module('theApp.controllers', [])
.controller('SliderMedium', [ '$scope', function($scope) {
$scope.slides = [
'images/slider/01.png',
'images/slider/02.png',
];
}]);
// ========= THIS IS controllers from angular-ui with no modification =======:
// ==========================================================================
var ModalDemoCtrl = function ($scope, $modal) {
$scope.items = ['item1', 'item2', 'item3'];
$scope.open = function () {
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: ModalInstanceCtrl,
resolve: {
items: function () {
return $scope.items;
}
}
});
};
};
var 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');
};
};
Comment puis-je résoudre ce problème? Dites-moi si d'autres informations sont nécessaires. Merci.
UPDATE: balises HTML inutiles supprimées, contenu de controller.js et app.js ajouté.
Une directive nommée slide
semble être à la fois dans angular-flexslider
et ui.bootstrap.carousel
. Si vous n'avez pas besoin de carrousel, essayez de construire AngularUI Bootstrap sans le soutien du carrousel.
Il semble qu'angular utilise le boostrap slide
au lieu du flexslider slide
et que le bootstrap nécessite la transclusion qui est également requise par flex-slider
, il existe donc un conflit sur la priorité.
Vous pourrez également résoudre ce problème en jouant avec l'ordre de chargement, mais je n'en suis pas certain.
Afin d'éviter tout conflit avec bootstrap carousel, thenikso/angular-flexslider a ajouté une nouvelle directive flex-slide
avec slide
.
Les utilisateurs bootstrap peuvent utiliser flex-slide
au lieu de la directive slide
.
<flex-slider flex-slide="s in slides" animation="slide">
<li>
<img ng-src="{{s}}">
</li>
</flex-slider>
Jussi Kosunen a raison, mais vous n'avez pas besoin de créer votre propre version de AngularUI Bootstrap . Il suffit de renommer slide en fslide en HTML.
<flex-slider slide="s in slides" animation="slide">
<li>
<img ng-src="{{s}}">
</li>
</flex-slider>
à
<flex-slider fslide="s in slides" animation="slide">
<li>
<img ng-src="{{s}}">
</li>
</flex-slider>
Et bien sûr, la directive angular-flexslider.js.
match = attr.slide.match(/^\s*(.+)\s+in\s+(.*?)(?:\s+track\s+by\s+(.+?))?\s*$/);
à
match = attr.fslide.match(/^\s*(.+)\s+in\s+(.*?)(?:\s+track\s+by\s+(.+?))?\s*$/);
Et n'oubliez pas de laisser ces étapes dans le fichier Lisez-moi pour les autres contributeurs.
J'ai eu cette erreur..parce que j'ai copié une directive prédéfinie pour créer une nouvelle directive ... et que j'ai oublié de changer le nom de la directive ..directive('addTransaction', function () {