没有$ scope的控制器

时间:2016-04-04 14:59:47

标签: angularjs

我刚刚遇到一些代码,控制器中没有$ scope。

这是代码

<div ng-app="myApp" ng-controller="ctrlCarLists as cars">
<button ng-click="cars.showCars()">
Cars
</button>

<button ng-click="alert(cars.data)">
Test
</button>
</div>


var app = angular.module('myApp', []);
app.controller("ctrlCarLists", function () {

this.data = 'hello';
this.showCars = function () {
    alert("Ford, Toyata, Mercedes");
    };
});

以上代码正在运行,但this.data无法访问...为什么?单击按钮时可以访问showCars()。为什么不能this.data无法访问?

当我们使用this关键字在控制器中声明任何变量或函数时应该调用什么?它的行为类似于静态属性或类的功能吗?

jsfiddle link https://jsfiddle.net/tridip/z5wkzc0g/

3 个答案:

答案 0 :(得分:1)

ng-controller="ctrlCarLists as cars"

&#34;汽车&#34;指的是你的控制器,&#34;这个&#34;也是指你的控制器。

ng-click="cars.showCars()"

当触发此功能时,它将引用&#34; showCars()&#34;控制器中的功能。

答案 1 :(得分:1)

正如Yury Tarabanko在评论中解释的那样,没有找到警报功能,原因是:

  

https://docs.angularjs.org/guide/expression#context

     

Angular不使用JavaScript的eval()来计算表达式。   相反,Angular的$ parse服务处理这些表达式。

     

Angular表达式无法访问全局变量   窗口,文档或位置。这种限制是故意的。它   防止意外进入全球国家 - 一个共同的来源   微妙的错误。

     

而是在调用的函数中使用$ window和$ location等服务   从表达。这些服务提供对全局变量的可模拟访问。

来源:

Why is ng-click not working?

答案 2 :(得分:0)

ng-click 需要表达式(see docs)。

alert(cars.data)

不是angularJS可以编译的表达式(它不知道警告指的是什么)因此它应该替换为

ng-click="cars.data()"

因为cars.data()是一个可以编译的表达式。

Fiddle

或者

Fiddle

我们可以拥有这个:

this.alert = function (text) {
    alert(text);
}