为什么我的 Angular 范围变量未定义?

Why is my Angular scope variable undefined?

我有一个包含 6 个引号的引号数组。 接下来我有一个 getRandomNum 函数,它 returns 一个介于 0 和 6 之间的数字。

要在我的 chooseQuote 函数中使用:

<body ng-app="myApp" ng-controller="DashCtrl as dash">

    <div class="quotes" title="Quotes">
        <p>{{dash.chooseQuote(dash.num)}}</p>
    </div>

</body>

我的 Dash 控制器中的代码:

var vm = this;
var num = 0;

var quotes = [
    {
        quote: "Money won't create success, the freedom to make it will.",
        author: "Nelson Mandela"
    },
    // etc ...
];

function getRandomNum(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

num = getRandomNum(0, 5);

vm.chooseQuote = function(i) {
    console.log(i);
    return quotes[i]["quote"];
}

console.log(num);
console.log(vm.chooseQuote(num));

现在检查控制台,我得到的 num 是未定义的,也无法得到未定义的 'quote'。这发生在我的 chooseQuote 函数第二次被调用时。

首先console.log:

工作正常,下一个 console.log 打印正确的引用,但是在最后一个 console.log,第二次进入我的 chooseQuote 函数时我得到 i/num 未定义:

你看到我哪里出错了吗?

num 在您提供的代码中定义为私有控制器变量。看起来 vm 是您用来引用控制器 $scope 的内容,因此您需要将 num 设为 vm 的 属性 所以它是暴露在视野中。

vm.num = 0;

...

vm.num = getRandomNum(0, 5);

...

console.log(vm.num);
console.log(vm.chooseQuote(vm.num));