为什么我的 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));
我有一个包含 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));