我必须制作代表包旅行的这个应用程序.包裹由天组成,范围从0到N天.每天都有一系列服务,范围从0到N服务.还有一家酒店.
我的laravel应用程序从中获取的Web服务器为我提供了一个预先设置的包,其中包含一个日期列表:每个包含服务列表和酒店数据(到目前为止未使用过).在响应中,我有一个包的属性列表(现在无关紧要)和一个天数组,称为days_info.该响应被放在我的PackageController上的$scope.package中. PackageController还声明了一个名为packageBlock的指令,该指令包含天数列表以及包的其他一些数据.
<div ng-repeat="day in package.days_info" class='row'> <div class='col-md-12'> <package-days-block></package-days-block> </div> </div>
内部< package-days-block>指令,我有另一个在每天内遍历服务列表.
<div class='container-fluid' ng-repeat='service in day.services' ng-controller="ServiceController"> <service-block></service-block> </div>
这就是问题开始的地方:对于我的不支持,我现在在ServiceController中有一个$scope.service.所以,我开始通过$scope.service在ServiceController中根据我的需要更改它.
$scope.service有一个名为service_id的属性.我把一个监听器/观察器放在上面,所以在任何时候更改了$scope.service.service_id,我要求另一个service_table(保存有关服务的信息,它基于之前由用户选择或更改的service_id),并将其放在$scope.service.table中.
// ServiceController $scope.reloadServicesTable = function(service_id,service_day,date,paxes){ MandatoryService.getServiceTable(service_id,paxes) .then( function(service_data) { $scope.service.table = service_data; },... );
在观察程序上调用reloadServicesTable以进行service_id更改.
// ServiceController $scope.$watch( 'service.service_id',// Places the watcher to watch the changes on the service's ID. function(new_service,old_service) { if( new_service === old_service ) return; $scope.reloadServicesTable($scope.service.service_id,$scope.service.service_day,$scope.day.date,$scope.package.paxes); } );
问题从这里开始:当service_id只更改一次时,将调用服务表的请求两次.
上帝啊,这到底是为什么?!
我的代码的另一部分是,我从PackageController运行整个days_info数组,并在service.table:service.table.price中读取属性价格的值.在那里,我意识到有两个范围:我处理的一个范围,另一个范围我没有它来自哪个FREAKING IDEA!
如果我放一个console.log($scope);在遍历days_info的方法内部,我为每个请求获得两个范围.这个方法在PackageController上.
任何想法为什么会这样?
P.S.:这是我的第一个AngularJS应用程序,所以,如果我搞砸了一些基本的东西,那就太容易了……
编辑:
正如一位评论员所指出的,我的问题不是很可重复.可悲的是,我不能只把我怀疑的部分放在这里,因为我没有任何想法,问题所在! (我知道这没有多大帮助)
我从Chrome控制台拍摄了一些屏幕截图:
首先,请求触发了service_id的更改
如您所见,每次请求都会被调用两次.这不是一次性的事情. / api / service / {id} …是对服务表信息的调用. / api / service / by_route / origin / …返回从一个城市到另一个城市(或相同)的服务列表.一个不干涉另一个.
另一个图像是来自PackageController $scope的console.log的输出,在service_id被更改时.
如您所见,有两个不同的范围.并且b范围是范围的儿子. r范围也在调用service_id上的观察者?