Angularjs:同时使用$ routeProvider和ng-controller

时间:2014-01-11 04:27:00

标签: angularjs angular-ui angularjs-routing

我使用$ routeProvider用于90%以上的控制器,但是使用ng-controller将控制器连接到angular-ui bootstrap html popover模板。

它可以工作,但我用ng-controller指定的每个控制器都被调用两次。 $ routeProvider中指定的控制器都不会被调用两次。被调用两次的控制器仅在angularui bootstrap popover模板中由ng-controller引用,并且未在$ routeProvider中指定。我看过了:

AngularJs: controller is called twice by using $routeProvider

Angularjs: Controller is called multiple times

和stackoverflow上的“控制器调用两次”问题的许多其他解决方案。现有的解决方案都没有奏效。

在支持ng-controller的情况下将控制器附加到DOM元素时使用$ routeProvider?如果没有,我该如何重组?无法使用$ routeProvider来定义弹出模板的控制器,因为它们没有$ routeProvider拦截的URL。

以下是相关代码 - 来自angular config:

$routeProvider
.when('/doc/:docId', {
  templateUrl: '/partials/doc/',
  controller: 'docCtrl',
})

来自/ partials / doc /

的相关href
<a href="#" popover-animation="false" popover-title="versions" popover-template="/partials/versions" popover-placement="bottom" class="btn right">Versions</a>

angularui popover指令是:

angular.module( 'ui.bootstrap.popover', [ 'ui.bootstrap.tooltip' ] )
.directive( 'popoverPopup', function () {
  return {
    restrict: 'EA',
    replace: true,
    scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' },
    templateUrl: '/templates/popover/popover'
  };
})
.directive( 'popover', [ '$compile', '$timeout', '$parse', '$window', '$tooltip', function ( $compile, $timeout, $parse, $window, $tooltip ) {
  return $tooltip( 'popover', 'popover', 'click' );
}])

.directive( 'popoverTemplatePopup', function () {
  return {
    restrict: 'EA',
    replace: true,
    scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&', template: '@' },
    templateUrl: '/templates/popover/popover-template'
  };
})

.directive( 'popoverTemplate', [ '$tooltip', function ( $tooltip ) {
  return $tooltip( 'popoverTemplate', 'popover', 'click' );
}]);

现在,/ partials / versions模板调用versionsCtrl:

<div ng-controller="versionsCtrl">
  <div class="versions_hover">
    <header>Versions</header>
  </div>
</div>

versionsCtrl只包含一个console.log,并且它被调用两次。

0 个答案:

没有答案