2016-08-18 89 views
8

我试图做一个包装组件ngAudio包装本身将是控制器的玩家 - 并且会与ngAudio的函数进行交互。我遇到了一些问题,我可以将它注入组件的控制器,并在那里访问ngAudio,但我无法从模板的范围访问它。我已经尝试使用$scope.ngAudio = ngAudio;之类的东西将ngAudio设置为范围,但无济于事 - 如果有人有任何想法,那将是非常棒的。我相信它需要某种双向绑定?或者通常从指令级访问ngAudio模块。无法从指令模板访问模块,Angular

代码:

组件:

.component('player', { 
    // isolated scope binding 
 bindings: { 
   genre: '=', 
   track: '=', 
   ngAudio: '<' 
 }, 

 templateUrl : '/templates/player-directive-template.html', 

 // The controller that handles our component logic 
 controller : function($scope, ngAudio) { 

   //tried: 
   //$scope.ngAudio = ngAudio; 
   ngAudio.play("https://api.soundcloud.com/tracks/167999916/stream?client_id=123456576789"); 

 } 
}); 

模板

<div class="container" id="player"> 

 <button class='btn btn-primary' ng-click='ngAudio.paused ? ngAudio.play() : ngAudio.pause()'>{{ngAudio.paused ? "Play" : "Pause" }}</button> 
</div> 

回答

5

由于这是一个组件,你有没有尝试过...

this.ngAudio = ngAudio; 

不,实际上,根据文档,你想将它设置为loadplay结果,如:

this.audio = ngAudio.play("https://api.soundcloud.com/tracks/167999916/stream?client_id=123456576789"); 

看到文档的“角音频示例”部分在http://danielstern.github.io/ngAudio/#/docs (在页面的最底部)

+0

谢谢!只需将其放入模板中,并且仍然不会看到模板中的绑定。它在模板的HTML中显示为未定义。 –

+1

ngAudio这里的服务不是指令,你试图访问的实际上是'play'调用的结果,所以我认为你应该指定这个。我更新了答案,也查看了添加的链接。 – Meligy

+1

谢谢!你是对的,我指的是服务而不是它的一个实例。祝你有美好的一天 :) –