相关疑难解决方法(0)

在哪里放置模型数据和行为?[TL; 博士; 使用服务]

我正在与AngularJS合作完成我的最新项目.在文档和教程中,所有模型数据都放入控制器范围.我知道必须存在控制器,因此在相应的视图中.

但是,我不认为该模型应该在那里实施.它可能很复杂并且具有私有属性.此外,人们可能希望在另一个上下文/应用程序中重用它.将所有内容放入控制器完全打破了MVC模式.

对于任何模型的行为都是如此.如果我使用DCI架构并从数据模型中分离行为,我将不得不引入其他对象来保存行为.这可以通过引入角色和上下文来完成.

当然,模型数据和行为可以使用普通的javascript对象或任何"类"模式来实现.但AngularJS的做法是什么呢?使用服务?

所以它归结为这个问题:

在AngularJS最佳实践之后,您如何实现与控制器分离的模型?

javascript model-view-controller dci angularjs

340
推荐指数
7
解决办法
7万
查看次数

AngularJS中的非单身人士服务

AngularJS在其文档中明确指出服务是单身人士:

AngularJS services are singletons
Run Code Online (Sandbox Code Playgroud)

与直觉相反,module.factory也返回一个Singleton实例.

鉴于非单例服务有很多用例,实现工厂方法返回服务实例的最佳方法是什么,这样每次ExampleService声明一个依赖项时,它都会被一个不同的实例所满足ExampleService

service singleton factory instance angularjs

89
推荐指数
4
解决办法
5万
查看次数

何时使用嵌套控制器而不是angularjs中的服务?

我刚开始使用AngularJS,所以我不是专家.

我有一个div代表我的html视图的正确区域.在那个div我有一个控制器,即

<div class="rightContainer" ng-controller="rightContainerCtrl">...</div>
Run Code Online (Sandbox Code Playgroud)

在div中我有一个表,一个搜索区域等.该div中的每个区域都有自己的控制器,它看起来像这样:

<div class="rightContainer" ng-controller="rightContainerCtrl">
...
   <div class="search" ng-controller="searchCtrl">...</div>
...
   <div class="table" ng-controller="tableCtrl">...</div>

 </div>
Run Code Online (Sandbox Code Playgroud)

例如,搜索区域有自己的控制器,它是rightContainerCtrl的子节点,因为它需要改变父节点中的某些内容(rightContainerCtrl),但是rightContainer div正在增长,现在它很大,并且包含几个嵌套控制器.

我认为使用这个嵌套控制器在这个上下文中是不好的,因为所有嵌套控制器共享父作用域,并不是所有控制器都需要访问所有父作用域变量,所有控制器都是rightContainerCtrl的"囚犯",所以它们是与其父控制器高度耦合.

它看起来像一个上帝对象反模式(在这种情况下是上帝控制器),所以我认为不是使用嵌套控制器我可以重构我的代码以消除rightContainerCtrl控制器并改为使用服务(如在外观设计模式中),然后,控制器将使用该服务,而不是共享范围变量.

但由于我不是AngularJs的专家,我不确定我是对的还是离开这个父控制器更好,也许我错过了什么,所以我的问题是

何时更好地使用嵌套控制器(嵌套范围)以及何时更好地在angularjs中使用服务?

anti-patterns god-object angularjs

11
推荐指数
2
解决办法
3969
查看次数

AngularJS哲学 - 控制器作为服务的"窗口"

对不起,标题含糊不清;

我一直在重构我的一些AngularJS代码,试图更加"Angular",并且我注意到这种模式突然出现了:

app.service("someService", function(...) {
    ...
}

app.controller("ControllerForThisSection", function($scope, someService) {
    $scope.someService = someService
}
Run Code Online (Sandbox Code Playgroud)

基本上,控制器主要是为范围提供服务的引用,因此视图可以使用它,例如

<div ng-if="someService.status">
    ....
</div>
Run Code Online (Sandbox Code Playgroud)

因此,我有多个控制器除了依赖某些共享数据或服务之外什么都不做,并且用于引用通过作用域可用的那些服务.

使用这种设计有什么不利之处吗?我能改进思考吗?这是"有角度"的方式吗?

谢谢你的建议!

javascript design-patterns angularjs angularjs-service angularjs-scope

7
推荐指数
1
解决办法
560
查看次数