Angularjs 在Angular.js的一个视图中开发小部件
如果您能分享您的观点/经验,我将不胜感激 假设您有一个视图,其中包含几个小部件,这些小部件共享一些数据(从服务器获取)。例如,我们可能在同一个视图中有一个树、列表和面包屑小部件,自然,单个项目的名称可以同时显示在多个小部件中。 我的问题是,发展这种观点的最佳做法是什么? 具体而言:Angularjs 在Angular.js的一个视图中开发小部件,angularjs,Angularjs,如果您能分享您的观点/经验,我将不胜感激 假设您有一个视图,其中包含几个小部件,这些小部件共享一些数据(从服务器获取)。例如,我们可能在同一个视图中有一个树、列表和面包屑小部件,自然,单个项目的名称可以同时显示在多个小部件中。 我的问题是,发展这种观点的最佳做法是什么? 具体而言: 这些小部件是完全独立的吗?(最容易实现,但存在性能问题) 如果小部件相互依赖,它们是否通过以下方式进行通信: 单一模型(引入小部件之间的紧密耦合并防止进一步的代码演化) 事件(失去耦合,但由于失去契约而容易出错,代码
- 一个服务,如果我有两个以上需要通信的指令,我可能会使用它
。使用要求:'controllerNameHere'
方法,您可以使用require
而不是this
在控制器上定义方法。但是,这种方法基本上仅限于单向通信:从具有$scope
的指令到它所需要的指令。例如,在AngularJS主页上,require
指令要求s选项卡指令。这允许窗格
指令调用窗格
指令控制器上的方法,但选项卡
指令不能调用选项卡
指令控制器上的方法。(有关详细信息,请参阅)窗格
scope:true
,则不必传播任何内容。它们都可以$watch
一些父作用域属性(由于JavaScript原型继承的工作方式,所有指令都可以看到父作用域属性)。如果使用的是作用域:{…}
,则可以使用“=”或“@”来定义本地指令作用域变量,并使用$watch
来监视它们
如果您关心$watchs的性能(因为每个摘要周期至少对它们进行一次评估),那么事件可能更合适
另一件需要考虑的事情是:您希望指令了解URL还是范围属性?使用范围属性可能会使您的指令更易于重用。所说的“小部件”是指“指令”?指令或较小的视图。其思想是,这是作为应用程序中的一个单独的UI组件开发的。谢谢你的回答。我的意思是说,它们是否都有单独的业务逻辑,例如,从服务器获取相关数据以供显示。我的担心当然有两个方面——如果它们在这方面是独立的,那么它们很容易编写和重用,但是由于其他小部件可能需要相同的数据,这是对网络的浪费。另一方面,如果它们相互依赖,它们就会紧密耦合,难以维护。我将在脑海中处理您的其他建议,并让您知道它们是否适用于我们的情况。谢谢。马克,你好。对我来说,使用服务或require属性的通信听起来有点过于耦合,这样小部件就失去了灵活性。因此,我倾向于使用基于事件的沟通。关于最后一个问题,实际上,您建议的侦听父范围上的某些属性的方法似乎是最好的,因为它减少了依赖性。总的来说,你可以看到我更喜欢开发独立的小部件。然而,我的项目中有人更喜欢在公共(更高)范围内维护共享模型,因此所有小部件都可以看到相同的数据。从通信的角度来看,这种方法要简单得多,因此数据只位于一个地方,所有的小部件都可以访问它,因此不需要通信,因为基本上你看的是相同的数据。然而,这引入了硬耦合,我担心一旦产品变得更大、更复杂,并且您开始在其他地方重用小部件,硬耦合将变得难以管理。@Stas,我个人更倾向于使用一种服务,而不是使用普通的上作用域。通用的上限方法需要特定的HTML结构(或使用$rootScope)。我不建议数据共享受到HTML结构的限制。