angularjs $ scope.InputModelName не определено

0

У меня есть одно поле ввода и пытаюсь получить значение от этого.

<!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, поэтому я попробовал использовать отправку формы, а затем значение получилось.
Поэтому мой вопрос:

Как получить значение из этого простого поля ввода без отправки формы?

Plunker

обновленный

Почему console.log дает мне undefined поскольку тот же код дает мне значение, когда он был вызван, отправив форму?

  • 0
    Я не очень понимаю вопрос. Но вы используете ng-init неправильно, см. Doc docs.angularjs.org/api/ng/directive/ngInit . Если вы хотите инициализировать значение модели, вы должны сделать это в самом контроллере.
  • 0
    Код выглядит хорошо, в чем ваша проблема? Даже поршень работает нормально.
Показать ещё 2 комментария
Теги:

3 ответа

0

После того, как я получил отличные знания из 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);
}); 

Plunker

  • 0
    Не рекомендуется использовать JQLite в контроллере, кажется, вы пытаетесь решить другую проблему? почему бы просто не назначить этот токен внутри контроллера? Попробуй посмотри про XY проблему
  • 0
    @Grundy, мой ключ токена взят из Asp.net Razor server side code . Я не уверен, что controller js может выполнять функцию бритвы @GetAntiForgeryToken() . Более подробный на techbrij.com/angularjs-antiforgerytoken-asp-net-mvc
Показать ещё 6 комментариев
0

Код, поставленный в поле зрения, выполняется после кода, помещенного в контроллер 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

обновленный плункер

0

Подождите, пока область контроллера получит данные ng-init из пользовательского интерфейса.

var app = angular.module('Application', []);

app.controller('ApplicationRootController', function ($scope, $timeout) {
    $timeout(function(){console.log($scope.antiForgeryToken_test);}, 2000);
});
  • 0
    Есть ли какое-либо событие, например, form loaded completely а не setTimeout
  • 0
    оформить документацию $ viewContentLoaded

Ещё вопросы

Сообщество Overcoder
Наверх
Меню