我想知道正确的方法,我有一个服务,一个工厂和一个控制器。
该服务具有<template>
<div id="app">
<img src="./assets/logo.png">
<hello></hello>
<parallax src=require('../assets/logo.png')></parallax>
</div>
</template>
<script>
import Hello from './components/Hello'
//import parallax ?
export default {
name: 'app',
components: {
Hello,
parallax
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
属性,默认情况下以selectedTable
开头,用于存储所选表格,以便在工厂和控制器中使用;该服务还有一个null
属性,它在工厂和控制器中定期更新,该服务如下所示:
touches
工厂通过设置变量Module.service('tablesService', function(){
this.data = {
selectedTable: null,
touches: 0
}
});
来使用该服务,并使用方法var data = tablesService.data
修改select
和data.selectedTable
的值:
data.touches
控制器查看每个if (data.selectedTable === this){
data.touches++;
if (data.touches === 2) {
data.selectedTable = null;
}
} else {
if (data.selectedTable && data.selectedTable != this) {
data.touches++;
data.selectedTable.select();
}
data.selectedTable = this;
}
事件的表格列表,当它发现被点击的表格时,它会调用它的onClick
方法,即工厂中的方法,如果点击的表格是在selectedTable中,它会更改select()
变量,因此当它调用touches
方法时,select()
获取selectedTable
作为新价值。
null
问题在于,更改$scope.tablesData = tablesService.data;
$scope.selectedTable = $scope.tablesData.selectedTable;
$scope.touches = $scope.tablesData.touches;
$scope.findTable = function(event){
$scope.touches = 0;
for(t in $scope.tables) {
var table = $scope.tables[t];
var result = table.findMe(event.offsetX,event.offsetY);
if(result.type === 'table') {
if ($scope.selectedTable === table){
$scope.touches++;
}
table.select();
break;
}
}
不会更新服务中的变量,反之亦然,这也适用于selectedTable,我尝试在$scope.touches
上使用$watch
}和$scope.touches
,但每次更改$scope.tablesData.touches
时,$digest()
方法都不会启动,因此我必须致电$scope.touches
,这看起来很糟糕,并且没有一直解决问题。
我的观察者看起来像这样:
$apply()
阅读这篇文章http://kirkbushell.me/when-to-use-directives-controllers-or-services-in-angular/我发现我可以通过$ rootScope。$ broadcast()向应用程序广播一个事件,但我不确定如何实现这个,也许那个&#39 ; s不是解决问题的最佳方法。