Angularjs 什么';什么是最好的有角度的建筑?

Angularjs 什么';什么是最好的有角度的建筑?,angularjs,angularjs-directive,angularjs-routing,Angularjs,Angularjs Directive,Angularjs Routing,我必须为Angular中的应用程序构建一个组件,我想知道什么是正确的方法。基本上,我需要以下观点: /items-仅显示左侧的项目列表 /items/new-第二个屏幕将在左侧保留项目列表,并在右侧显示用于添加项目的容器 /items/1/show-第三个屏幕左侧显示项目列表,右侧显示项目 我的第一个猜测是最好的方法是为itemsList创建一个指令,另一个指令用于newitem,另一个指令用于show item。然后,我将创建共享同一控制器(或不共享)的3条路由,并在这3条路由的视图中放置指

我必须为Angular中的应用程序构建一个组件,我想知道什么是正确的方法。基本上,我需要以下观点:

/items
-仅显示左侧的项目列表

/items/new
-第二个屏幕将在左侧保留项目列表,并在右侧显示用于添加项目的容器

/items/1/show
-第三个屏幕左侧显示项目列表,右侧显示项目

我的第一个猜测是最好的方法是为
itemsList
创建一个指令,另一个指令用于
newitem
,另一个指令用于
show item
。然后,我将创建共享同一控制器(或不共享)的3条路由,并在这3条路由的视图中放置指令

但后来我意识到,每当我更改URL时,就会再次调用控制器以及每个指令,这样我的数据就会从数据库中重新加载。这样做的主要目的是让左侧的
itemsList
保持静态,因此如果必须从数据库重新加载,它将失去我想要的可用性


提前感谢您的任何回复

您最好创建一个服务,每个视图都使用该服务来保存数据库中的数据。然后,每个控制器只要求服务呈现数据


服务是单例的,不会在每个新页面上重新创建,而是在应用程序的生命周期内保持活动状态。

从服务或工厂获取数据的示例如下:

(函数(){
"严格使用",;
angular.module('rage').factory('datacontext',['$http','$rootScope','$q',datacontext]);
函数datacontext($http,$rootScope,$q){
var服务={
getMyData:getMyData,//
};
回程服务;
函数getMyData(域、端口、控制器路径、会话ID){
domain=“localhost:”
port=“14985”;
var url=“http://”+domain+port+controllerpath+”?sid=“+sessionID;
var deferred=$q.deferred();
延迟。通知(“提取列表…”);
var-retval=[];
//前。http://localhost:14985/api/controller?sid=abf843945b62cda8
$http({
方法:“GET”,
编码:“JSON”,
url:url,
标题:{
“访问控制允许来源”:“true”
}
}).success(函数(数据、状态、标题、配置){
retval=数据;
延迟。解决(retval);
});
回报。承诺;
}

})()
检查这正是您所描述的,您可以将页面分割成不同的“视图”,并进行更新independently@aarosil我忘了提到这是一个已经构建的应用程序,它没有使用ui路由器,所以我想研究一下不使用它的可能选项。你可以创建一个服务来存储它e> 项(以防止重新加载)并将
$location
注入指令,以便可以使用
$location.url()
控制显示内容(列表、详细信息或添加新内容)@aarosil I最终切换到ui路由器,以一种更简单的方式处理它,结果证明手动执行它不会像simpleThanks mate那样简单!而且服务知道是执行http调用来检索数据还是数据已经存在的方式与执行存储它的变量的if语句一样简单?因为您正在生成
$http
call,您可以让服务返回每个控制器都可以调用
then()的承诺
打开以获取数据。请参阅,我希望项目列表在路由更改时不会更改,用户会觉得列表中的数据在单击列表中的项目时是静态的,因此如果我执行
$http
调用,则列表将刷新,如果服务是
$http
承诺,则需要一段时间才能加载(因为这是它返回的结果),它只执行一次http调用(当应用程序启动时)。每次控制器使用该服务时,它都会查看承诺,当该承诺得到解决时,所有其他时间您请求数据时,它都会在承诺中显示为已解决。它不会重新提取路由更改的数据。感谢详细的示例bob。我希望itemsList在路由更改时保持静态ser将单击列表中的项目,只有右侧会更改。因此,如果我每次使用$http调用检索项目,列表将每次都刷新,对吗?您将如何管理它?@LucasGarcia-我理解。不,您的左侧静态列表不会每次都加载。我还有一些静态数据,这些数据会得到l为treeview小部件加载。我在我的
app.js
文件中添加了init代码。我已经添加了上面的代码片段。使用$rootScope可以将结果保存在那里;希望它是一个小数据集,以免弄乱rootScope。然后在任何其他控制器中,例如,您只需插入
$rootScope
,然后访问任何对象在那里。