13

我使用这些包:来自 angular-ui 包的 angularjs modal:http ://angular-ui.github.io/bootstrap/#/modal 和来自这里的 Angular-flexslider:https ://github.com/EnthusiasticCode/angular-弹性滑块

每个插件在单独的页面中都可以正常工作。但是当我在一页中使用它们时,angular-flexslider 会导致错误:

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

模板文件是这样的:

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

和 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 ...) });
  }]);

controller.js 文件是:

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

我该如何解决?告诉我是否需要更多信息。谢谢。

更新:删除了不必要的 html 标记,添加了 controller.js 和 app.js 内容。

4

4 回答 4

10

一个名为的指令slide看起来同时在angular-flexslider和中ui.bootstrap.carousel。如果您不需要轮播,请尝试在不支持轮播的情况下构建 AngularUI Bootstrap。

看起来 angular 使用的是 boostrapslide而不是 flexslider slide,而 bootstrap 需要嵌入,这也是 所需的flex-slider,因此对于哪个优先级存在冲突。

您也可以通过摆弄加载顺序来解决此问题,但我不确定。

于 2013-10-02T12:01:44.407 回答
5

为了避免与引导轮播冲突,thenikso/angular-flexslider 添加了一个新指令flex-slide以及slide.

Bootstrap 用户可以使用flex-slide而不是slide指令。

<flex-slider flex-slide="s in slides" animation="slide">
    <li>
        <img ng-src="{{s}}">
    </li>
</flex-slider>
于 2015-01-28T17:10:01.140 回答
3

Jussi Kosunen 是对的,但您不需要自己构建 AngularUI Bootstrap。只需在 HTML 中将幻灯片重命名为 fslide。

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

当然还有 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*$/);

并且不要忘记将这些步骤留在自述文件中以供其他贡献者使用。

于 2014-06-22T04:39:26.400 回答
0

我得到了这个错误..因为我复制了一个预制指令来制作一个新指令......并且忘记更改指令名称。 .directive('addTransaction', function () {

于 2018-10-19T21:17:40.743 回答