繁体   English   中英

通过调用角度控制器函数从ng-init指令初始化服务器数据?

[英]Initialize the server data from ng-init directive via calling angular controller function?

我们开发了一个企业应用程序,完整的客户端框架构建在AngularJS上,服务器端框架构建在ASP.NET Web API上。 在应用程序中,我们有350多个html页面和250多个Web API。 我们通过调用控制器函数从ng-init指令初始化服务器数据有很多方面。 因为在我们的应用程序中,所有数据都来自ASP.NET Web API。 但我对ng-init的文档感到惊讶,该文档以一个漂亮的大胆轮廓说:

唯一适当的用途是使用ngInpe来替换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 DocAnglarjs-styleguide关于保持控制器聚焦的指南,我几乎没有关注,如下所述:

  1. 我们是否做错了通过函数初始化数据,因为所有数据都来自Server API?
  2. 当前的初始化方法违反了基于AngularJS的应用程序中的行业惯例。 如果是,那么我们需要在申请中遵循哪种方法?
  3. 根据angularjs-styleguide,我们是否需要为每个视图创建sperate控制器,以便控制客户端测试覆盖范围?

实现上述方法的原因(通过控制器函数从ng-init指令初始化数据),由于大量应用,我最初的想法是遵循MVC解耦代码和关注点分离的哲学。

Angular被称为Model-View-Whatever。 因此,完全取决于您是否遵循角度应用中的结构。

不遵循结构有一些优点和缺点。

优点1.一个控制器中可用的数据可以在许多视图中共享,因此您不必使用$ rootScope或HTML5 localStorage / sessionStorage将数据从一个控制器传递到另一个控制器。

缺点1.由于控制器中的数据在多个视图中可用,因此维护数据非常困难,因为数据显然绑定到视图,并且在同一数据上会有许多隐式角度监视。 这将导致糟糕的表现。

现在回答使用ng-init初始化控制器中数据的第1点和第2点。 我认为这不是一个好方法,因为你已经根据视图进行了初始化。 让我们看一个在请求时找不到您的视图的场景,然后不会进行初始化。 并且由于不会发生初始化,控制器中将存在垃圾值/错误。 因此最好将控制器初始化与视图分开。

对第3点的回答是,当您为每个视图使用单独的控制器时,实际上是在避免单片代码方法,这总是一个好点,因为这会导致模块化方法。 Angular JS中的关注点分离不仅仅是为每个视图使用单独的控制器,但从长远来看,服务和指令也是为了这个目的。

希望以某种方式帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM