我有一个指令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