鉴于以下示例,我很好奇为什么 scope:true
按预期工作来切换元素。但是,如果scope:{}
使用,则不会调用 toggle 方法ng-click
。通过我自己的实验,是否使用 bindToController 和 controllerAs 都没有区别,问题是一样的。
(function(angular) {
'use strict';
angular.module('test', [])
.directive('collapsibleMenu', [function() {
return {
scope: {}, // doesn't work
//scope: true, // works
restrict: 'A',
controller: function() {
var ctrl = this;
ctrl.open = false;
ctrl.toggle = function() {
ctrl.open = !ctrl.open;
console.log('toggle', ctrl.open);
}
},
bindToController: true,
controllerAs: 'ctrl'
};
}]);
})(window.angular);
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-beta.1/angular.min.js"></script>
<div ng-app="test">
<div collapsible-menu>
<button ng-click="ctrl.toggle()">toggle menu 0</button>
<ul role="menu" ng-show="ctrl.open" class="ng-cloak">
<li><a href="#">link</a></li>
<li><a href="#">link</a></li>
<li><a href="#">link</a></li>
</ul>
</div>
<div collapsible-menu>
<button ng-click="ctrl.toggle()">toggle menu 1</button>
<ul role="menu" ng-show="ctrl.open" class="ng-cloak">
<li><a href="#">link</a></li>
<li><a href="#">link</a></li>
<li><a href="#">link</a></li>
</ul>
</div>
</div>