簡體   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