簡體   English   中英

這是否正確使用ng-init?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM