我有一個指令clickable-tag
對此我通過我的data
作爲標籤的名稱(tag.tag
):角UI路由器防止國有觸發內部指令
<a class="item item-avatar"
ui-sref="nebula.questionData({questionId: question.id})"
ng-repeat="question in questionsData.questions">
<img src="{{question.user.profile_photo || '../img/avatar.jpg'}}">
<h2 class="question-title">{{question.title}}</h2>
<p>{{question.description}}</p>
<div class="question-tags-list" ng-repeat="tag in question.tags" clickable-tag data="{{tag.tag}}">
<button type="submit" class="tag">{{tag.tag}}</button>
</div>
</a>
該指令clickable-tag
是ui-sref
內側(外a
標籤)。在指令中,我希望防止外部ui-sref
,而用戶應該被引導到另一個狀態(我在下面的指令中指定的那個狀態)。
.directive("clickableTag", function($state) {
return {
restrict: "A",
scope: {
data: "@"
},
link: function(scope, elem, attrs) {
elem.bind('click', function(ev) {
console.log('scope.tagName: ', scope.tagName);
if (scope.data) {
$state.go('nebula.tagData', {tagName: scope.data});
}
});
}
};
})
的問題是,只有指令內指定的狀態的resolve
運行。實際呈現的視圖是由外部ui-sref
指定的狀態。
有關如何防止觸發外部ui-sref
的任何解決方案。而是觸發一個指令中指定的狀態改變?
任何幫助,將不勝感激。謝謝。
注:我已經嘗試preventDefault()
,stopPropagation()
,return false
我的指令內。
我猜想clickableTag指令正確加載,對不對?如果是這種情況,您可以在指令中監聽$ stateChangeStart並防止在那裏轉換。 – FlorianTopf
@FlorianTopf我已經在'app.run'裏面聽'$ stateChangeStart'了。不知道如何在指令中使用它嗎? –
你可以在指令中注入'$ rootScope',然後監聽'$ stateChangeStart'事件。您可以根據需要經常聽這個活動。 – FlorianTopf