0
我正在尝试在AngularJS中创建一个可重用的typehead指令,但我在路上遇到了一些颠簸。这是我的工作例如:Angularjs typehead指令
Directives.js
app.directive('autosuggest', function() {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
/* Nothing here yet */
}
};
});
app.directive('suggestinput', function() {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
// Bind keys
elem.bind('keydown', function (e) {
if (e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13) { scope.$emit('listNavigate', { code: e.keyCode }); }
else {
// Get suggestions
scope.getSuggest(attrs.source, elem.val());
}
});
// Listen for suggestion list
scope.$on('listSelect', function (e, data) {
elem.val(data.name);
});
}
};
});
app.directive('suggestlist', function() {
var selectedIndex = -1;
return {
restrict: 'A',
link: function (scope, elem, attrs) {
scope.$on('listNavigate', function (e, data) {
if (data.code === 38) {
selectedIndex--;
// User pressed up arrow
elem.children().removeClass('sel');
elem.children().eq(selectedIndex).addClass('sel');
} else if(data.code == 40) {
selectedIndex++;
// User pressed down arrow
elem.children().removeClass('sel');
elem.children().eq(selectedIndex).addClass('sel');
} else if(data.code == 13) {
// Prepare data
var selectData = {};
selectData.suggestValue = elem.children().eq(selectedIndex).children().html();
selectData.suggestId = elem.children().eq(selectedIndex).children().attr('item-id');
// Send data to input(s)
scope.$emit('listSelect', selectData);
}
});
}
};
});
HTML:
<fieldset autosuggest>
<input type="hidden" name="languageId">
<input type="text" suggestinput source="languages">
<input type="submit" class="button" value="Save">
<ul suggestlist ng-show="suggest.languages" class="suggestList">
<li ng-repeat="language in suggest.languages">
<a href="#" ng-bind="language.name" item-id="{{language.id}}"></a>
</li>
</ul>
</fieldset>
我有两个问题:
- 我如何通过项目-ID从暗示输入的建议列表?
- 如何使它成为可重用组件? (即使我在同一页上有多个打字头,也可以工作)
谢谢!
我使用的是引导3 RC1。我一直在等待一段时间的更新图书馆,但还没有发现任何东西。它可以很容易地修改为使用最新版本的bootstrap?非常感谢您的回答。 – Angelin
没关系,我已经想通了,非常感谢您的回答! – Angelin
对不起,我甚至没有看到您的第一条评论,一直很忙。你有没有得到angular.ui.bootstrap来使用bootstrap 3 rc1? @AngelinSirbu – dcodesmith