我们开发了一个企业应用程序,完整的客户端框架构建在AngularJS上,服务器端框架构建在ASP.NET Web API上。在应用程序中,我们有350多个html页面和250多个Web API。我们通过调用控制器函数从ng-init指令初始化服务器数据有很多方面。因为在我们的应用程序中,所有数据都来自ASP.NET Web API。但是我对ng-init的文档感到很惊讶,该文档用一个很好的大胆的大纲说明:
ngInit唯一适当用于别名ngRepeat的特殊属性,如下面的演示所示。除了这种情况,您应该使用控制器而不是ngInit来初始化范围上的值。
我希望得到行业专家/ Angularjs核心团队成员的反馈意见。
首先让我简要介绍一下我们在应用程序中做了什么,为了显示行业列表,我们加载行业HTML页面并显示服务器数据。 HTML模板代码如下所示:
<div ng-init="initIndustries()">....</div>
将从初始化的industryCtrl调用“initIndustries”函数。 industryCtrl.js代码如下所示:
app.controller("industryCtrl",["$scope",function($scope){
//Sets the server data in the $scope property.
$scope.initIndustries = function(){
//perform ajax request and set the data into the $scope property.
}
$scope.initAddIndustry = function(){
// perform ajax request for getting a dropdown data on Add Industry Page.
}
}])
根据下面提到的Angularjs Doc和Anglarjs-styleguide guideline on Keep Controller Focused,我没有什么顾虑:
实现上述方法的原因(通过控制器函数初始化ng-init指令中的数据),由于应用程序较大,我最初的想法是遵循MVC解耦代码和关注点分离的理念。
答案 0 :(得分:0)
Angular被称为Model-View-Whatever。因此,完全取决于您是否遵循角度应用中的结构。
不遵循结构有一些优点和缺点。
赞成 1.一个控制器中可用的数据可以在许多视图中共享,因此您不必使用$ rootScope或HTML5 localStorage / sessionStorage将数据从一个控制器传递到另一个控制器。
缺点 1.由于控制器中的数据在多个视图中可用,因此维护数据非常困难,因为数据显然绑定到视图,并且在相同数据上将存在许多隐式角度监视。这会带来糟糕的表现。
现在回答使用ng-init初始化控制器中数据的第1点和第2点。我认为这不是一个好方法,因为你已经根据视图进行了初始化。 让我们根据请求找到您的视图,然后初始化不会发生。并且由于初始化不会发生,控制器中将存在垃圾值/错误。因此最好将控制器初始化与视图分开。
对第3点的回答是,当您为每个视图使用单独的控制器时,实际上是在避免单片代码方法,这总是一个好点,因为这会导致模块化方法。 Angular JS中的关注点分离不仅仅是为每个视图使用单独的控制器,但从长远来看,服务和指令也是为此目的。
希望能以某种方式帮助你。