簡體   English   中英

如果在頁面開始時滿足條件,則從Angular控制器內重定向

[英]Redirect from within Angular controller if condition is met at start of page

我有一個用於跟蹤用戶工作時間的Angular應用程序。 用戶添加新作業時,將通過向導進行操作,每個頁面/控制器將新屬性添加到作業對象。 向導完成后,用戶可以通過從應用程序主頁導航到作業主頁來開始跟蹤。

但是,可以在完成向導之前退出向導(通過“后退”按鈕),然后導航到作業的主頁。 我需要的是該主頁的控制器重定向到缺少任何作業屬性的相應向導頁面。

在控制器代碼開始時從本地存儲中檢索作業變量。

var job = DatastoreService.objectJob();
    job.initFromHash($routeParams.jobHash);


function checkJobProps(prop, route){
        if(!job.data.hasOwnProperty(prop))
            $location.path('/wizard/add-position/' + $routeParams.jobHash + '/' + route);
    }

    checkJobProps('taxSettings', 'tax');
    checkJobProps('payrollSettings','payroll-opt');
    checkJobProps('breaks', 'breaks');
    checkJobProps('allowances', 'allowances');
    checkJobProps('deductions', 'deductions');
    checkJobProps('generalSettings', 'general-settings');

如果某些屬性不可用,則控制器上此代碼下方將中斷。 這些函數調用中沒有一個執行得足夠快以防止錯誤。 它們將重定向,但並不優雅,並且也將始終是列表中生效的最后一個。

我這樣做有希望嗎? 從應用程序的主頁到每個作業的主頁的導航是一個指令,因此,我想可能可以從$ routeParams.jobhash初始化作業並檢查指令中的這些屬性,但是我首先必須更多地了解指令。

任何幫助將非常感激。

$location.path()是異步的,不會阻止其后面的代碼執行。 您將必須使用return語句手動停止執行。

請注意,return語句必須屬於控制器功能塊。 您不能將其放在另一個函數中,因為那樣只會停止執行該特定函數。

遵循以下原則應該可以:

var job = DatastoreService.objectJob();
job.initFromHash($routeParams.jobHash);

var redirectPath;

function checkJobProps(prop, route) {

  if (redirectPath || job.data.hasOwnProperty(prop)) return;
  redirectPath = '/wizard/add-position/' + $routeParams.jobHash + '/' + route;
}

checkJobProps('taxSettings', 'tax');
checkJobProps('payrollSettings', 'payroll-opt');
checkJobProps('breaks', 'breaks');
checkJobProps('allowances', 'allowances');
checkJobProps('deductions', 'deductions');
checkJobProps('generalSettings', 'general-settings');

if (redirectPath) return $location.path(redirectPath);

... rest of the code ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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