[英]Is this proper use of ng-init?
我有一個使用angularjs的MVC應用程序
(我顯然過度簡化了)
首先我的控制器有這個:
function MyController()
{
$scope.myInit = function()
{
$http.get("ShowData").success(function() {
$scope.mything = 123;
});
}
// so once all my controller is defined, I call the init method
$scope.myInit();
}
我的觀點有以下代碼
@if (AllowToShowData)
{
<div><span ng-bind="{{mything}}" /></div>
}
注意:上面的http.get和AllowToShowData通過相同的權限連接。 因此,如果AllowToShowData為false,http.get也將失敗。
如您所見,如果AllowToShow為true,MVC將呈現該部分。 如果沒有,它將不會呈現,但代碼仍然會調用myInit方法,最終也會失敗。
因此,為了避免這種情況,我在控制器中刪除了對myInit的調用,並將視圖更改為:
@if (AllowToShowData)
{
<span ng-init="myInit()"></span>
<div><span ng-bind="{{mything}}" /></div>
}
這樣,只有在允許和需要時才會調用myInit方法。
問題基本上是:這是ng-init的好習慣嗎?
我沒有找到任何其他方法來做到最佳和干凈。
謝謝
Angularjs文檔不建議使用ng-init https://docs.angularjs.org/api/ng/directive/ngInit 。
我不喜歡為配置值進行額外的ajax調用。 所以,我建議采用以下方式。
在視圖中為控制器添加了配置部分。 像這樣的東西
@section scripts
{
<script>
var model = {
allowToShowData: @AllowToShowData.ToString().ToLower()
};
</script>
}
並將html片段渲染為
<div ng-if="allowToShowData"><span ng-bind="mything" /></div>
在角度控制器中,您可以從模型中獲取標志值,並根據標志值進行調用,並將標志存儲到$scope
以便在ng-if
指令中使用。
function MyController($window)
{
$scope.allowToShowData = $window.model.allowToShowData;
$scope.myInit = function()
{
$http.get("ShowData").success(function() {
$scope.mything = 123;
});
}
if ($scope.allowToShowData) {
$scope.myInit();
}
}
為了改進代碼風格,我建議使用方法controller
來創建控制器
angular
.module("yourModuleName")
.controller("yourControllerName", ["$window", function($window) {
//your controller code
}]);
在此處查看更多詳細信息https://docs.angularjs.org/guide/controller 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.