更新 2015.06.01
此问题已在库中解决 - https://github.com/mbenford/ngTagsInput/pull/239
问题
ng-tags-input 没有 on-tag-click 处理程序,因此用户单击标签以通过角度表达式引发函数调用:
<!-- does not exist -->
<tags-input on-tag-click="handleTagClick(data)"></tags-input>
- 项目的 github页面
此问题已在库中解决 - https://github.com/mbenford/ngTagsInput/pull/239
ng-tags-input 没有 on-tag-click 处理程序,因此用户单击标签以通过角度表达式引发函数调用:
<!-- does not exist -->
<tags-input on-tag-click="handleTagClick(data)"></tags-input>
这个解决方案似乎并不理想,但代替指令本身实施的解决方案,这是我让它工作的唯一方法:
这个需要:
需要注意的几点:
这是直接从有关创建自定义标签模板的项目文档中借用和修改的
<div nx-tag class="tag-template">
<div>
<a href="" tabindex="-1" ng-click="$tagClicked(data)"><span>{{$getDisplayText()}}</span></a>
<a class="remove-button" ng-click="$removeTag()">✖</a>
</div>
</div>
如果您在上面的模板中注意到,我正在使用nx-tag
,我正在$tagClicked
那里创建函数。
.directive 'nxTag', ->
{
restrict: 'AC'
link: ($scope, elem, attrs)->
$scope.$tagClicked = (data)->
$scope.$emit 'nxTag.clicked', data
}
.directive 'onTagClick', ($parse)->
{
link: ($scope, elem, attrs)->
clickFunc = if attrs.onTagClick then $parse attrs.onTagClick else angular.noop
$scope.$on 'nxTag.clicked', (evt, tagData)->
evt.preventDefault()
evt.stopPropagation()
clickFunc $scope, {data: tagData}
}
<tags-input ng-model="vc.viewData.tags" template="nx-tag-item.html"
on-tag-removed="vc.save()" on-tag-added="vc.save()"
on-tag-click="vc._test(data)">
<auto-complete source="vc.getTags($query)"></auto-complete>
</tags-input>
截至 2015 年 5 月中旬,此问题已在库https://github.com/mbenford/ngTagsInput/pull/239中得到解决。现在您可以将它与指令一起使用,如下所示:
<tags-input on-tag-clicked="callback()"
@jusopi:感谢您的出色回答,我是一个有角度的初学者,如果没有您的帮助,我永远不会知道这是如何工作的。我将您的指令翻译成javascript,也许这有助于像我一样不使用coffeescript的人:
隐式标签指令
my_app.directive('nxTag',
function() {
return {
restrict: 'AC',
link:
function($scope, elem, attrs) {
$scope.$tagClicked = function(data) {
return $scope.$emit('nxTag.clicked', data);
};
}
};
}
);
on-tag-click 指令
my_app.directive('onTagClick', ['$parse',
function($parse) {
return {
link:
function($scope, elem, attrs) {
var clickFunc;
clickFunc = attrs.onTagClick ? $parse(attrs.onTagClick) : angular.noop;
return $scope.$on(
'nxTag.clicked',
function(evt, tagData) {
evt.preventDefault();
evt.stopPropagation();
return clickFunc($scope, {
data: tagData
});
});
}
};
}
]);