2017-01-01 6 views
0

コードvm.canGoForwardをマイコントローラからサービスに移動して実装の詳細を隠そうとしています。v2.canGoForwardが関数ではありません

CODE変更する前

これがうまく働きました。

ビュー:

<button ng-disabled="!vm.canGoForward()" class="btn btn-primary" name="next" type="button" ng-click="vm.gotoStep(vm.currentStep + 1)"> 

コントローラー:

var vm = this; 
vm.currentStep = 1; 
vm.steps = WizardService.getWizardSteps(vm.formData); 

vm.canGoForward = function() { 
    var res = true, 
    i, 
    nextStateIndex = vm.currentStep + 1; 

    if (nextStateIndex > vm.steps.length) { 
    return false; 
    } 
    for (i = 1; res && i <= nextStateIndex; i++) { 
    res = (res && vm.steps[i-1].isReady()); 
    } 

    return !!res; 
}; 

サービス

CODE変更後の

ビュー

は同じ

コントローラ

var vm = this; 
vm.currentStep = 1; 
vm.steps = WizardService.getWizardSteps(vm.formData); 
vm.canGoForward = WizardService.canGoForward(vm.currentStep, vm.steps); 

サービス

var wizardService = { 
    getWizardSteps: getWizardSteps, 
    canGoForward: canGoForward 
}; 
return wizardService; 

function getWizardSteps(formData) { 
    var wizardSteps = [ 
    { 
     step: 1, 
     name: 'Name', 
     template: 'views/wizard/step1.html', 
     isReady: function() { return true; } 
    }, 
    { 
     step: 2, 
     name: 'Email', 
     template: 'views/wizard/step2.html', 
     isReady: function() { return formData.firstName && formData.lastName; } 
    }, 
    { 
     step: 3, 
     name: 'Job Category', 
     template: 'views/wizard/step3.html', 
     isReady: function() { return formData.email; } 
    } 
    ]; 
    return wizardSteps; 
} 

function canGoForward(currentStep, steps) { 
    console.log(steps); 

    var res = true, 
    i, 
    nextStateIndex = currentStep + 1; 

    if (nextStateIndex > steps.length) { 
    return false; 
    } 
    for (i = 1; res && i <= nextStateIndex; i++) { 
    res = (res && steps[i-1].isReady()); 
    } 

    return !!res; 
} 
遺跡

次のエラーが表示されます:TypeError: v2.canGoForward is not a function。どうすれば解決できますか? 2番目のバージョンで

+0

は、それがVMまたはv2ですか? – trincot

+0

これは特にv2を言う 'v2.canGoForwardはfn0の関数ではない(コンパイル時の評価) – methuselah

答えて

1

、次の行が実際にそれを割り当てない、その場でWizardService.canGoForwardを呼び出します:割り当てられます

vm.canGoForward = WizardService.canGoForward(vm.currentStep, vm.steps); 

何をすることは、したがって、明らかに関数ではありませんその呼び出しの戻り値であります呼び出しが後で試みられたときのエラーメッセージ。

あなたが機能を割り当てて、それが後で呼び出されたときに引数が渡されるようにしたい場合は、bindを使用します。

vm.canGoForward = WizardService.canGoForward.bind(WizardService, vm.currentStep, vm.steps); 
+0

ああ素晴らしいです!ありがとうございました – methuselah

+0

あなたを歓迎します;-) – trincot

関連する問題