这是一个可以满足您要求的工作程序:
http://plnkr.co/edit/HcoyFyCSnrfmLu3lI7a6
这里的优点是指令是完全自包含的,每个指令都有自己的范围对象。请注意,您甚至不再需要控制器。
另见:http ://www.egghead.io/video/fYgdU7u2--g
您的新指令定义:
app.directive('panelTrigger', function() {
return {
scope:{},
link: function($scope, element, attrs) {
$scope.toggle = function() {
$scope.visibility = !$scope.visibility;
};
// Default visibility is false
$scope.visibility = false;
$scope.$watch(attrs.visible, function( newValue, oldValue ) {
if ( newValue === oldValue ) {
return;
}
var elm = angular.element(element.children()[1]);
if (newValue) {
elm.attr('style', 'display: block;');
} else {
elm.attr('style', 'display: none;');
}
});
}
};
})
并对您的 html 进行一个小改动:
<div data-panel-trigger data-visible="visibility">
<a ng-click="toggle()" href="#">Panel A</a>
<div class="panel span2">
<p>Panel Content</p>
</div>
</div>