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

时间:2015-02-16 03:19:09

标签: javascript angularjs angularjs-scope angular-ngmodel

我有一个引号数组,其中包含6个引号。 接下来我有一个getRandomNum函数,它返回一个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));

现在检查控制台我得到的数字是未定义的,也无法获得引用&#39;未定义的。这是在chooseQuote函数内部第二次被调用时发生的。

首先是console.log: enter image description here

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

enter image description here

你知道我在哪里出错吗?

1 个答案:

答案 0 :(得分:1)

num被定义为您提供的代码中的私有控制器变量。看起来好像vm用于引用控制器的$范围,因此您需要将num设为vm的属性,以便{&1}} #39;暴露在视野中。

vm.num = 0;

...

vm.num = getRandomNum(0, 5);

...

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