当我在框中输入内容时,h1
文本会相应更改。所以,ng-model
工作正常。
但是,alert
函数永远不会被触发。为什么呢?
<html lang="en" ng-app>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/bootstrap.min.css">
<title></title>
<script type="text/javascript" src="angular.min.js"></script>
</head>
<body>
<input type="text" ng-model="name" ng-change="alert('name changed')">
<h1>Hello3, {{name}}</h1>
</body>
</html>
Angular 1.5.5
更新 这是来自@stackdisplay的评论的工作版本:
<html lang="en" ng-app="myApp" ng-controller="AppCtrl">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="bootstrap.min.css">
<title></title>
<script type="text/javascript" src="angular.min.js"></script>
<script type="text/javascript">
var app = angular.module("myApp",[]);
app.controller('AppCtrl', function($scope) {
$scope.myfunc = function(text) { window.alert(text); }
})
</script>
</head>
<body>
<input type="text" ng-model="name" ng-change="myfunc('name changed')">
<h1>Hello, {{name}}</h1>
</body>
</html>
这是有效的。但是,如果我没有实现myfunc
(或之前的alert
函数),为什么我不会收到控制台错误?
以及@think_win_win建议使用window.alert
的原因不起作用,如果window
是全局变量(同样,控制台中没有任何错误)?
答案 0 :(得分:3)
在Javascript中几乎无处不在,所有闭包的根源都是
window
,其中包含alert()
。几乎无处不在,但并非到处都是。不在其中的上下文中 评估
ng-change()
。你可以修复它,例如, 创建一个控制器,将一个名为alert
的值添加到$scope
,并将其指向window.alert
。<div class="form-group"> <label class="control-label" for="statusdate">Status Date</label> <div class="controls" ng-controller="myController"> <input type="date" ng-change="alert('something')" data-ng-model="statusDate" id="statusdate" class="form-control"> </div> </div>
然后在Javascript中:
angular.module("MyApp") .controller("myController", ['$scope', '$window', function($scope, $window) { $scope.alert = $window.alert; }]);
修改:您只能使用
window
代替$window
,因为此处window
可用,但这会让您的代码更多 从长远来看很难测试。