У меня есть одно поле ввода и пытаюсь получить значение от этого.
<!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>
Но то, что я получил, не undefined
, поэтому я попробовал использовать отправку формы, а затем значение получилось.
Поэтому мой вопрос:
Как получить значение из этого простого поля ввода без отправки формы?
Почему console.log
дает мне undefined
поскольку тот же код дает мне значение, когда он был вызван, отправив форму?
После того, как я получил отличные знания из code in view - called after code inside controller
@Grundy code in view - called after code inside controller
Таким образом, я пытался убрать код с контроллера только тогда, когда содержимое полностью загружено. Мое окончательное решение ниже
angular.element(document).ready(function () {
console.log("[Value - After form loaded completly] $scope.antiForgeryToken_test = " + $scope.antiForgeryToken_test);
});
Asp.net Razor server side code
. Я не уверен, что controller js
может выполнять функцию бритвы @GetAntiForgeryToken()
. Более подробный на techbrij.com/angularjs-antiforgerytoken-asp-net-mvc
Код, поставленный в поле зрения, выполняется после кода, помещенного в контроллер js. Поэтому, когда контроллер выполняет и линию вызова
console.log("[Controller level value - which never come out] $scope.antiForgeryToken_test = " + $scope.antiForgeryToken_test);
ng-init
по-прежнему не работает.
Для этого вы можете использовать setTimeout как
setTimeout(function(){
console.log("[Controller level value - which never come out] $scope.antiForgeryToken_test = " + $scope.antiForgeryToken_test);
});
здесь callback выполняется после задержки, поэтому он может быть после ng-init
form loaded completely
а не setTimeout
?
ng-view
Подождите, пока область контроллера получит данные ng-init из пользовательского интерфейса.
var app = angular.module('Application', []);
app.controller('ApplicationRootController', function ($scope, $timeout) {
$timeout(function(){console.log($scope.antiForgeryToken_test);}, 2000);
});
form loaded completely
а не setTimeout
ng-init
неправильно, см. Doc docs.angularjs.org/api/ng/directive/ngInit . Если вы хотите инициализировать значение модели, вы должны сделать это в самом контроллере.