Angularjs 将ng令牌auth与typeahead/猎犬一起使用

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

在Angular.js项目中,我使用Angular.js进行用户身份验证,我想集成

我已经构建了一个指令,其中链接函数的内容是:

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> &mdash; {{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> &mdash; {{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')) };