我使用$ 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,并且它被调用两次。