Javascript angularjs$scope.InputModelName未定义
我有一个输入字段,试图从中获取值Javascript angularjs$scope.InputModelName未定义,javascript,angularjs,Javascript,Angularjs,我有一个输入字段,试图从中获取值 <!DOCTYPE html> <html ng-app="Application"> <head> <script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script> <script> var app = angular.module('Application', []
<!DOCTYPE html>
<html ng-app="Application">
<head>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script>
<script>
var app = angular.module('Application', []);
app.controller('ApplicationRootController', function ($scope) {
console.log("[Controller level value - which never come out] $scope.antiForgeryToken_test = " + $scope.antiForgeryToken_test);
$scope.SubmitFunction = function(){
console.log("[Value - which come out only after form submitted] $scope.antiForgeryToken_test = " + $scope.antiForgeryToken_test);
};
});
</script>
</head>
<body>
<form id="ApplicationRoot"
ng-controller="ApplicationRootController"
ng-submit="SubmitFunction()" >
<button type="submit">Submit</button>
<div id="AntiForgeryKeyHolder">
<input
id="antiForgeryToken_test"
ng-model="antiForgeryToken_test"
ng-init="antiForgeryToken_test='PassKey123456789'"
type="hidden" />
</div>
</form>
</body>
</html>
var app=angular.module('Application',[]);
app.controller('ApplicationRootController',函数($scope){
console.log(“[Controller level value-从未出现]$scope.antiForgeryToken_test=“+$scope.antiForgeryToken_test”);
$scope.SubmitFunction=function(){
console.log(“[Value-仅在表单提交后显示]$scope.antiForgeryToken_test=“+$scope.antiForgeryToken_test”);
};
});
提交
但是我得到的是未定义的,所以我尝试使用表单提交,然后值出来了
如何在不提交表单的情况下从这个简单的输入字段中获取值
更新
为什么console.log
给我未定义的
,因为提交表单调用时,相同的代码会给我值?放置在视图中的代码,在放置在js控制器中的代码之后执行。所以当控制器执行并调用线路时
console.log("[Controller level value - which never come out] $scope.antiForgeryToken_test = " + $scope.antiForgeryToken_test);
ng init
在视图中但不工作
为了解决这个问题,你可以使用
这里回调在延迟后执行,因此它可以在ng init
等待控制器作用域从UI接收ng init数据
var app = angular.module('Application', []);
app.controller('ApplicationRootController', function ($scope, $timeout) {
$timeout(function(){console.log($scope.antiForgeryToken_test);}, 2000);
});
在我从@Grundycode-in-view获得大量知识之后-在控制器内部的code之后调用
所以,我试图只在内容完全加载时从控制器触发代码。我的最终解决方案如下
angular.element(document).ready(function () {
console.log("[Value - After form loaded completly] $scope.antiForgeryToken_test = " + $scope.antiForgeryToken_test);
});
我不太明白这个问题。但是您使用的ng init
是错误的,请参阅文档。如果您想初始化模型的值,您应该在控制器本身中这样做。代码看起来很好,您的问题是什么?就连plunker也工作得很好。@DavidVotrubec,ng init
也很好。视图中的代码-在控制器中的代码之后调用,所以,您可以使用setTimeout
和您需要的回调-检查值来执行此技巧:例如,是否有类似表单完全加载的事件,而不是setTimeout
?@FrankMyatThu,您可以查看。当然,如果您使用ng视图
是否有类似表单完全加载
的事件,而不是设置超时
签出$viewContentLoaded documentation不建议在控制器中使用jqLite,似乎您尝试解决了另一个问题?为什么不在控制器内部分配这个令牌呢?试试看@Grundy,我的令牌密钥来自Asp.net Razor服务器端代码。我不确定控制器js
是否可以执行razor函数@GetAntiForgeryToken()
。更详细的是,但您可以在全局变量中保存@GetAntiForgeryToken()
的结果,并使用itor甚至将jqLite中的部分移动到方向。我想知道全局变量方法是否会有所不同,因为首先运行控制器js中的代码。但我真的很想知道如何使用指令而不是jqLite的细节,如果您能指导我,我将非常高兴。
angular.element(document).ready(function () {
console.log("[Value - After form loaded completly] $scope.antiForgeryToken_test = " + $scope.antiForgeryToken_test);
});