我想創建一個自定義事件來切換Angular。該指令稱爲可切換。Angular指令,綁定點擊事件,以外部元素不工作
起初聽起來微不足道,但棘手的是,我希望能夠使用頁面上的任何按鈕或鏈接進行切換。
我寫的代碼如下
指令
'use strict';
angular.module('onsComponents')
.directive('togglable', function() {
return {
restrict: 'A',
transclude: true,
scope: {
togglerId: '@',
show: '@'
},
link: function(scope, element, attrs) {
if (!scope.togglerId) {
console.error("Toggler id must be given")
return
}
scope.visible = (scope.show === 'true')
scope.toggle = function() {
alert("Before " + scope.visible)
scope.visible = !scope.visible
alert("After " + scope.visible)
}
//Bind click event to given dom element
angular.element('#' + scope.togglerId).bind("click", function() {
scope.toggle()
})
},
templateUrl: 'app/components/toggler/toggler.html'
}
})
模板
<div ng-transclude ng-show="visible">
</div>
觀
<a href="" id="toggleButton" >Click me to toggle</a>
<div togglable toggler-id="toggleButton">
Hey
</div>
切換鏈接似乎正在工作。當鏈接被點擊時,我可以看到警報。麻煩的是內容沒有出現。看起來鏈接與內容不在同一範圍內,當我這樣做時,創建另一個範圍。
如果我移動模板內的點擊鏈接,如下所示。但那不是我想要的。
<!-- Move the link inside template -->
<a href="" ng-click="toggle()" >Click me to toggle</a>
<div ng-transclude ng-show="visible">
</div>
那我該如何做到這一點?
嘗試調用'範圍。$ apply()'在事件監聽器中調用'scope.toggle()'之後。 – 2014-10-20 11:08:48
@NikosParaskevopoulos是的,它在調用範圍之後起作用。$ appy()。謝謝 – Bren 2014-10-20 12:13:26
@NikosParaskevopoulos你可以將其作爲答案嗎? – Bren 2014-10-20 12:27:02