Angularjs 可以在两个隔离的指令之间共享控制器吗?
我有一个时间框架的代码,它显示一个标签,左边是信息,右边是事件信息。时间框架中的每种时间线类型都有两个标记/事件指令,它们本身使用一个抽象指令 我正在添加折叠标记/事件对的功能,并希望有一种比将折叠的从abstractTag的控制器中传递出去更干净的方法,进入时间线标记foo/时间线事件foo之间的共享控制器,并返回到abstractEvent使用的重复abstractTimelineCtrl 我希望能够在每对不同的abstractTag和abstractEvent指令之间共享abstractTimelineCtrl的实例。这目前只适用于abstractTag,但我还没有弄清楚如何为相应的abstractEvent提供与abstractTimelineCtrl相同的实例。任何想法都将不胜感激 HTML:Angularjs 可以在两个隔离的指令之间共享控制器吗?,angularjs,angularjs-directive,angularjs-controller,Angularjs,Angularjs Directive,Angularjs Controller,我有一个时间框架的代码,它显示一个标签,左边是信息,右边是事件信息。时间框架中的每种时间线类型都有两个标记/事件指令,它们本身使用一个抽象指令 我正在添加折叠标记/事件对的功能,并希望有一种比将折叠的从abstractTag的控制器中传递出去更干净的方法,进入时间线标记foo/时间线事件foo之间的共享控制器,并返回到abstractEvent使用的重复abstractTimelineCtrl 我希望能够在每对不同的abstractTag和abstractEvent指令之间共享abstractT
控制器不是单例的,每次Angular遇到构造函数时都会创建一个新版本的控制器。因此,虽然可以在两个隔离作用域指令中使用同一控制器,但不能使用同一控制器的同一实例 在AngularJS中,服务是单例的,因此如果您需要共享数据(
$scope
),最好通过这种方式传递数据,而不是依赖于控制器
在不使用服务的情况下,最好的办法是继续将隔离作用域绑定到其父作用域,然后再绑定到另一个作用域,但这样可能会得到一些不可靠的结果。我最终选择了服务修复。对于我的用例来说,这有点黑客,但它似乎在做我需要的事情。谢谢你的建议。
<ul id="tags">
<timeline-tag-foo>
<abstract-tag></abstract-tag>
</timeline-tag-foo>
<timeline-tag-bar>
<abstract-tag></abstract-tag>
</timeline-tag-bar>
</ul>
<div id="scrollContainer">
<div id="events">
<timeline-event-foo>
<abstract-event></abstract-event>
</timeline-event-foo>
<timeline-event-bar>
<abstract-event></abstract-event>
</timeline-event-bar>
</div>
</div>
angular.module('abstractTimeline', [])
.directive('abstractTag', [
function() {
restrict: 'E',
bindToController: true,
controller: 'abstractTimelineCtrl',
scope: {
name: '@'
},
templateUrl: 'abstractTimeline/abstractTag.html',
transclude: true
}
])
.directive('abstractEvent', [
function() {
restrict: 'E',
scope: {
width: '@'
},
templateUrl: 'abstractTimeline/abstractEvent.html',
transclude: true
}
])
.controller('abstractTimelineCtrl', [
function() {
var vm = this;
vm.collapsed = false;
}
]);