Solución:
ng-click debe ser una expresión. Las expresiones de AngularJS no tienen acceso directo a variables globales como ventana, documento o ubicación. Esta restricción es intencional. Evita el acceso accidental al estado global, una fuente común de errores sutiles.
alert () y console.log (), no parecen estar disponibles.
Ambos alert()
y console.log()
son evaluados contra el global window
objeto. Por otra parte ng-click
es una expresión de AngularJS y se evalúa contra la scope
asociado con él que no tiene ningún acceso directo a la window
objeto. Por lo tanto, no están disponibles en el interior. scope
.
AngularJS Expressions vs. JavaScript Expressions
Contexto: Las expresiones de JavaScript se evalúan en la ventana global. En AngularJS, las expresiones se evalúan contra un objeto de alcance.
AngularJS proporciona un servicio llamado $log
para ese propósito. Puedes usar $log
servicio como el siguiente:
var myApp = angular.module('myApp',[]);
myApp.controller('myController', ['$scope', '$log', function($scope, $log){
$scope.TestClick = function(){
$log.log('You have clicked');
}
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myController">
<input type="button" value="Click" ng-click="TestClick()"/>
</div>
Ambos son herramientas básicas proporcionadas por JS. ¡Debería estar disponible!
Si desea consolar o alertar desde HTML, probablemente no sea una buena manera de hacerlo. Tampoco creo que sea posible.
Puede optar por adjuntar su HTML a un controlador y luego mover el Console.log
o alert
a ese controlador. Y funcionará como se esperaba.
Expresiones AngularJS vs. Expresiones JavaScript
Las expresiones de AngularJS son como expresiones de JavaScript con las siguientes diferencias:
- Contexto: Las expresiones de JavaScript se evalúan contra el
global
ventana. En AngularJS, las expresiones se evalúan contra unscope
objeto.– Guía para desarrolladores de AngularJS – Expresiones AngularJS frente a Expresiones JavaScript