Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么ng click不起作用?_Javascript_Angularjs_Onclick - Fatal编程技术网

Javascript 为什么ng click不起作用?

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> <

为什么这个简单的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="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');
  };
});