Javascript 为什么ng click不起作用?
为什么这个简单的ng click示例不起作用?我已经在生产中使用angular几个月了,但是这个plunker让我感到困惑 如果您注意到,ng show属性正在工作。。。为什么没有点击?它总是警告默认值,而不是角度单击Javascript 为什么ng click不起作用?,javascript,angularjs,onclick,Javascript,Angularjs,Onclick,为什么这个简单的ng click示例不起作用?我已经在生产中使用angular几个月了,但是这个plunker让我感到困惑 如果您注意到,ng show属性正在工作。。。为什么没有点击?它总是警告默认值,而不是角度单击 <div ng-show="showTest" ng-click="alert('angular click')" onclick="alert('default click')">Default or angular click?</div> <
<div ng-show="showTest" ng-click="alert('angular click')" onclick="alert('default click')">Default or angular click?</div>
<div ng-show="dontShowMeIsNotDefinedSoIWontShow" >Not showing me, I know angular is working!</div>
整个html:
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<link data-require="bootstrap-css@*" data-semver="3.2.0" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" />
<script>
document.write('<base href="' + document.location + '" />');
</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.2.x" src="https://code.angularjs.org/1.2.6/angular.js" data-semver="1.2.25"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl as vm">
<br/><br/>
<div ng-show="showTest" ng-click="alert('angular click')" onclick="alert('default click')">Default or angular click?</div>
<div ng-show="dontShowMeIsNotDefinedSoIWontShow" >Not showing me, I know angular is working!</div>
</html>
安古拉斯普朗克
文件。写(“”);
默认还是角度单击?
没有给我看,我知道angular在工作!
在控制器定义中添加了一个警报
属性:
app.controller('MainCtrl', function($scope) {
var that = this;
$scope.showTest = true;
$scope.alert = function(msg) {
alert(msg);
};
});
我认为问题在于
ng click
指令将自动解释您在控制器对象范围内放入的任何内容。因此,如果控制器没有alert
属性,则不会发生任何事情。Angular的表达式不使用eval
函数,因此除非您在作用域链中的某个位置定义了名为alert
的函数,否则它将不会执行
Angular不使用JavaScript的eval()来计算表达式。
相反,Angular的$parse服务处理这些表达式
角度表达式无法访问全局变量,例如
窗口、文档或位置。这一限制是有意的。信息技术
防止意外访问全局状态–一种常见的
微妙的错误
相反,在调用的函数中使用诸如$window和$location之类的服务
来自表情。这些服务提供了对globals的可模拟访问
因此,您必须在您的范围内定义这样一个函数:
app.controller('MainCtrl', function($scope,$window) {
var that = this;
$scope.showTest = true;
$scope.alert = function() {
$window.alert('angular click');
};
});
演示
angular.module('plunker',[]);
var app=角度模块('plunker'[
“普朗克”
]);
app.config(函数(){
"严格使用",;
});
app.controller('MainCtrl',函数($scope,$window){
var=这个;
$scope.showTest=true;
$scope.alert=函数(文本){
$window.alert(文本);
};
});代码>
默认还是角度单击?
没有给我看,我知道angular在工作!
包括问题中的所有相关代码,而不仅仅是链接代码。链接会腐烂,人们不应该离开网站去帮助你。对于web内容,您可以使用堆栈片段准确地演示您正在运行的内容。这几乎是所有代码,除非您想查看我现在添加的空角度配置。是的,这正是重点。但再说一遍:为什么不是堆栈片段?不要说,显示。堆栈溢出属于开发人员使用的工具,在我看来,这适用于plunker,我的问题与之直接相关。这不会改变问题必须是自包含的事实。现在,你的问题不仅仅针对你;这是给别人的,以后再说。如果普朗克消失了(它很容易就消失了),没有它这个问题一定有意义。堆栈片段可以确保问题是自包含的(但是通过编辑,如果这是所需的全部代码,即使没有堆栈片段,它也是自包含的——SS只会让人们更容易帮助你,这当然是一个目标。)啊,天哪,我感觉我忽略了一些基本的东西,比如范围。我进行这些愚蠢的测试的唯一原因是为了追求自定义元素(web小部件),所以我已经很沮丧了…@FlavorScape我已经记不清有多少次因为“基本的东西”而失去了上午和下午。希望这有帮助?
app.controller('MainCtrl', function($scope,$window) {
var that = this;
$scope.showTest = true;
$scope.alert = function() {
$window.alert('angular click');
};
});