Angularjs 将ng令牌auth与typeahead/猎犬一起使用
在Angular.js项目中,我使用Angular.js进行用户身份验证,我想集成 我已经构建了一个指令,其中链接函数的内容是:Angularjs 将ng令牌auth与typeahead/猎犬一起使用,angularjs,angularjs-directive,Angularjs,Angularjs Directive,在Angular.js项目中,我使用Angular.js进行用户身份验证,我想集成 我已经构建了一个指令,其中链接函数的内容是: link: (scope, element, attrs) -> hs_list = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('hs8'), queryTokenizer: Bloodhound.tokeni
link: (scope, element, attrs) ->
hs_list = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('hs8'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: 'api/trainings/hs_list?q=%QUERY'
})
hs_list.initialize()
element.typeahead(null, {
name: 'hs-mapping-id',
displayKey: 'hs8',
source: hs_list.ttAdapter(),
templates: {
empty: [
'<div class="empty-message">',
'We cannot find this training',
'</div>'
].join('\n'),
suggestion: Handlebars.compile('<p class="clearfix"><strong>{{hs8}}</strong> — {{hs8_text}}<br /><span style="display:inline-block; height: 22px; overflow: hidden; white-space:nowrap; text-overflow:ellipsis; max-width: 400px;">{{hs6_text}}</span></p>')
}
})
.bind( 'typeahead:opened', ->
$(this).data('ttTypeahead').dropdown.$menu.addClass('overflow-hidden').perfectScrollbar()
)
.on 'keyup', ->
$(this).data('ttTypeahead').dropdown.$menu.perfectScrollbar('update')
link:(范围、元素、属性)->
hs_list=新猎犬({
datumTokenizer:Bloodhound.tokenizers.obj.whitespace('hs8'),
queryTokenizer:猎犬,标记,空白,
远程:“api/trainings/hs_列表?q=%QUERY”
})
hs_list.initialize()
元素。typeahead(null{
名称:“hs映射id”,
displayKey:'hs8',
来源:hs_list.ttAdapter(),
模板:{
空的:[
'',
“我们找不到这种训练”,
''
].join('\n'),
建议:handlebar.compile('{{hs8}}&mdash;{{hs8}}
{{hs6}
)
}
})
.bind('typeahead:opened',->
$(this).data('ttTypeahead')。下拉菜单。$menu.addClass('overflow-hidden')。perfectScrollbar()
)
.在“keyup”上,->
$(this).data('ttTypeahead')。下拉菜单。$menu.perfectScrollbar('update'))
当我尝试使用它时,我得到了未经授权的访问重定向,因为在侦探犬请求中缺少auth头。向请求添加身份验证头的方法是什么?好的,我找到了答案 ng token auth提供了一个帮助程序,该帮助程序返回以下项的标题: $auth.retrieveData('auth_头文件') 因此,为了与猎犬一起使用,我们需要做的就是:
angular.module('app').directive 'trainingsList', ($auth) ->
return {
restrict: 'A'
link: (scope, element, attrs) ->
hs_list = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('hs8'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote:
url: 'api/trainings/hs_list?q=%QUERY'
ajax:
headers: $auth.retrieveData('auth_headers')
})
hs_list.initialize()
element.typeahead(null, {
name: 'hs-mapping-id',
displayKey: 'hs8',
source: hs_list.ttAdapter(),
templates: {
empty: [
'<div class="empty-message">',
'We cannot find this training',
'</div>'
].join('\n'),
suggestion: Handlebars.compile('<p class="clearfix"><strong>{{hs8}}</strong> — {{hs8_text}}<br /><span style="display:inline-block; height: 22px; overflow: hidden; white-space:nowrap; text-overflow:ellipsis; max-width: 400px;">{{hs6_text}}</span></p>')
}
})
.bind( 'typeahead:opened', ->
$(this).data('ttTypeahead').dropdown.$menu.addClass('overflow-hidden').perfectScrollbar()
)
.on 'keyup', ->
$(this).data('ttTypeahead').dropdown.$menu.perfectScrollbar('update')
};
angular.module('app')。指令'trainingsList',($auth)->
返回{
限制:“A”
链接:(范围、元素、属性)->
hs_list=新猎犬({
datumTokenizer:Bloodhound.tokenizers.obj.whitespace('hs8'),
queryTokenizer:猎犬,标记,空白,
远程:
url:'api/trainings/hs_列表?q=%QUERY'
阿贾克斯:
标题:$auth.retrieveData('auth_headers'))
})
hs_list.initialize()
元素。typeahead(null{
名称:“hs映射id”,
displayKey:'hs8',
来源:hs_list.ttAdapter(),
模板:{
空的:[
'',
“我们找不到这种训练”,
''
].join('\n'),
建议:handlebar.compile('{{hs8}}&mdash;{{hs8}}
{{hs6}
)
}
})
.bind('typeahead:opened',->
$(this).data('ttTypeahead')。下拉菜单。$menu.addClass('overflow-hidden')。perfectScrollbar()
)
.在“keyup”上,->
$(this).data('ttTypeahead')。下拉菜单。$menu.perfectScrollbar('update'))
};