我有一个页面:/ tracks是一个项目列表,每个项目都带有ngclick和href项目。
href链接到基于ngclick中的函数传递的值的特定项目的视图。 href视图应自动填充,但不起作用。相关代码:
跟踪视图(已附加跟踪控制器):
<ion-item ng-repeat="item in vm.tracks" ng-click="vm.setTrack(item)" href="#/app/track">
{{item.name}}
</ion-item>"
轨道视图(已连接轨道控制器):
<ion-content>
{{vm.currentTrack.name}}
{{vm.currentTrack.metadata.desc}}
{{vm.currentTrack.metadata.author}}
{{vm.currentTrack.metadata.date}}
</ion-content>
跟踪控制器:
/** @fires $rootScope.TrackChange */
function setTrack(track){
vm.currentTrack = track;
$rootScope.$emit('TrackChange', track);
}
跟踪控制器:
/** @listens $rootScope.TrackChange */
$rootScope.$on('TrackChange', function(event, data) {
vm.currentTrack = data;
});
如何使此活动正常进行?将console.log命令放在侦听器中,表明vm.currentTrack正在更新,但是每次我在单击时触发新事件时,vm.currentTrack都会有另外的打印输出—这些事件不会被清除。跟踪视图仅出于某种原因在第二次单击时打印出vm.currentTrack。谁能指出我正确的方向?我应该做些不同的事情吗?
最佳答案
我建议您将currentTrack
数据存储在服务中,并将其同时注入track
和tracks
控制器中,或者将其存储在track
和tracks
的父控制器中,因为您要切换状态。其无法正常工作的原因是,仅在创建控制器即控制器后才分配您编写的侦听器。但是,即使在创建控制器之前,也会触发该事件。
您触发->切换状态->创建新控制器->订阅...您认为为时已晚吗? :)
专家提示!在角度上使用事件表明您走错了方向。