WizardHandler.wizard()。GOTO

时间:2014-02-25 23:41:22

标签: angularjs wizard

我使用https://github.com/mgonto/angular-wizard创建一个角度向导,其步骤可以从路径参数调用:

  • ... /步骤/ 1
  • ... /步骤/ 2

所以我创建了这个控制器:

.controller('createOrganizer', ['$scope', 'WizardHandler' , '$routeParams',
    function($scope,WizardHandler,$routeParams)
    {
        //$scope.data = {};
        $step = $routeParams.step;
        WizardHandler.wizard().goTo($step);     
    }])

在app.js和index.html上正确创建了正确的链接和路由

但是当我进入网址时,我明白了:

TypeError: Cannot call method 'goTo' of undefined

这是使用url参数预先选择角度向导步骤的方法吗?

=================更新=====================

我试过这样的事情:

.controller('createOrganizer',['$ scope','WizardHandler','$ routeParams',     功能($范围,WizardHandler,$ routeParams)     {         $ step = $ routeParams.step;

    $scope.$watch(WizardHandler.wizard(), function(step) {
            WizardHandler.wizard().goTo($step);
    });
}])

我的想法是告诉我何时实例化WizardHandler.wizard()以调用.goTo方法。使用此控制器即可得到此错误:

TypeError:无法设置未定义属性“已选择”

不确定我是否正确使用手表。我甚至测试了step变量,它没问题,显示与url相同的值。

=================解决了! =====================

    var step = parseInt($routeParams.step); // Important, as routeParams returns an String: the wizardHandler uses either an integer number or a string name of step. So I am parsing the number to prevent confusion.
    $scope.$watch(
    function() {return WizardHandler.wizard();}, 
    function (wizard) {
    if (wizard) wizard.goTo(step);
    });

我添加了一个init(step)函数来处理我需要的某些值的初始值,并且还可以防止由url引起的错误,如... / step / SOMERANDOMSTRING

感谢GregL的帮助!

2 个答案:

答案 0 :(得分:4)

通过快速阅读源代码,我的第一个猜测是您使用了<wizard>元素并指定了name属性,但是您没有将相同的名称传递给{{1} }。在代码中,如果您没有为WizardHandler.wizard()指定名称参数,它将使用默认名称,该名称是WizardHandler.wizard()使用的名称,没有<wizard>属性。

由于当您致电name时,您还没有回到向导的向导,它会解析为WizardHandler.wizard()并且调用undefined将失败,并显示您收到的错误。

至少,分开获取向导和goTo()调用以添加签入以确保您有一个有效的向导:

.goTo()

.controller('createOrganizer', ['$scope', 'WizardHandler' , '$routeParams', function($scope,WizardHandler,$routeParams) { //$scope.data = {}; $step = $routeParams.step; var wizard = WizardHandler.wizard(); if (wizard) wizard.goTo($step); }]); 赋值之前可能应该有一个var关键字,作为约定,只有Angular核心事物应该以{{1​​}}或jQuery选择变量开头。< / p>

编辑:您还可以尝试使用$step在加载向导时收到通知,但无法保证在{@ 1}}周期后立即调用该向导已加载,因此您将依赖于在将向导正确添加到$缓存后的某个时间运行$ apply / $ digest循环的假设。

你会这样做:

$watch()

答案 1 :(得分:0)

您可能正在尝试访问尚未初始化的向导实例。如果将其包装在$timeout中,它应该可以工作(并且与上面的$watch解决方案相比,它不那么复杂):

$timeout(function() {
    WizardHandler.wizard().goTo($step); 
});