我想知道如何更改数据,但在我的角度应用程序中保留相同的控制器。基本上,当我点击其中一个活动时,我会有一个活动列表(餐馆,公园等......),视图将显示所有餐厅,同样的事情是公园。我知道怎么做,但我需要创建一个park_ctrl和一个restaurant_ctrl,因为数据的格式将完全相同。我只想知道我是否只能使用一个控制器,只需更改单击这些按钮时收到的数据。
我希望我的问题有道理。
答案 0 :(得分:0)
答案 1 :(得分:0)
我认为这不是一个好主意,而是基于意见。
你可以创造一个功能:
function($scope){
$scope.changePage = function (type) {
if(type==="park"){
$scope.parks = asynLoadFunctionToGetParks();
}else{
if(type === "restaurants"){
/* same as below */
}
}
};
}
使用以下内容更改视图中的类型:
<button ng-click="changePage('parks')">Parks</button>
<button ng-click="changePage('restaurants')">Restaurants</button>
<div ng-if="type==='park'">
{{parks}}
</div>
<div ng-if="type==='restaurants'">
{{restaurants}}
</div>
答案 2 :(得分:0)
我认为这里的问题是大多数可用的Angular例子都是&#34; hello world&#34;因此它们显示直接从Controller检索数据。问题是开箱即用的AngularJS本身并没有真正的业务逻辑层,我认为大多数添加了这样一层的人都太忙了,无法提供示例。
我这样做的方法是创建一个&#34; master&#34;可以在运行块中预先获取所有不同数据类型的服务,也可以在用户导航应用程序时根据您的需要懒洋洋地获取。然后,我在路由解析(resolve属性)中提供对适用子集合的引用,或者在指令的情况下提供隔离范围。
或者,控制器可以通过调用masterService.getCollection($scope.collectionName)
或类似的东西来询问数据,但如果这样做,则会遇到masterService
可能还没有该特定集合的问题,然后你必须使用所有承诺解决方案来控制你的控制器,就像控制器负责处理它一样。
您可以通过绑定到View中的masterService.collections[$scope.collectionName]
来避免这种情况,这会使Controller仅暴露$ scope或者controllerAs变量上的集合,而masterService仍负责检索数据并使其可用。 / p>
答案 3 :(得分:0)
是的,你可以。只需在范围中使用不同的服务和公共变量。
if (something) {
$scope.data = restaurantsService.get();
} else {
$scope.data = parksService.get();
}