2016-09-30 4 views
0

У меня есть форма, как это:Ng-модель не обновляет значение в контроллере

<form name="UserForm" class="form-horizontal" ng-submit="setUser()" > 

    <input id="firstname" name="firstname" type="text" placeholder="add a firstname.." class="form-control input-md" ng-model="user.firstname" required> 

     <button id="Submit" name="Submit" class="btn btn-primary" ng-click="showMessage = 'false'" ng-disabled="UserForm.$invalid">Save</button> 
    </form> 

и в моем контроллере:

customModule2.controller('UserController',function ($state, $stateParams, $location, $log,$http, $scope, userFactory , appSettings) { 

$scope.user = {}; 
$scope.setUser = function() { 
    if($scope.UserForm.$valid) { 
     userFactory.addUser($scope.user) 
      .success(function (data) { 
       console.log("controller set : " + this.user.firstname); 
       $scope.addMessage = data; 
       $log.log(''); 

      }) 
      .error(function (data, status) { 
       console.log("user firstname : " + $scope.user.firstname); 
      }); 
     $scope.UserForm.$setPristine(); 
    } 
}; 
)}; 

Теперь, когда я печатаю ПгвЬЫат я могу видеть, что это добавлено, но когда я проверяю консоль, значение в контроллере равно null.

Любая помощь будет

было оценено

EDIT:

У меня есть этот контроллер, и это почти тот же код и он работает хорошо:

customModule2.controller('ProjectController',function ($state, $stateParams, $location, $log,$http, $scope, projectFactory , appSettings) { 
    $scope.project = {}; 
    $scope.setProject = function() { 
    if($scope.ProjectForm.$valid) { 
     projectFactory.addProject($scope.project) 
      .success(function (data) { 
       $scope.addMessage = data; 
       console.log('here' + $scope.project.name); 
      }) 
      .error(function (data, status) { 
       $scope.addMessage = "Erreur lors de l'ajout : " + data + ' ' + status; 
       console.log('here'); 
       $log.log(data.error + '' + status); 
      }); 
     $scope.showMessage = true; 
     $scope.ProjectForm.$setPristine(); 
    } 
    }; 

Может быть $scope проблема?

+0

Вы регистрируете user.cin не user.firstname –

+0

В вашем предоставленном коде есть синтаксические ошибки. вы уверены, что это то, что у вас есть в вашем коде? –

+0

Да, это мой код, и я обновляю код, «это фрагмент» –

ответ

0

Вероятно, функции success(...) и error(...) имеют разный объем (переменная $scope). Чтобы исправить это, вы можете кэшировать значение.

customModule2.controller('UserController',function ($state, $stateParams, $location, $log,$http, $scope, userFactory , appSettings) { 

    $scope.user = {}; 
    $scope.setUser = function() { 
     var firsName = $scope.user.firstname; 
     if($scope.UserForm.$valid) { 
      userFactory.addUser($scope.user) 
       .success(function (data) { 
        console.log("controller set : " + this.user.cin); 
        $scope.addMessage = data; 
        $log.log(''); 

       }) 
       .error(function (data, status) { 
        console.log("user firstname : " firstName); 
       }); 
      $scope.UserForm.$setPristine(); 
     } 
    }; 
)}; 
+0

Ну, у меня есть форма, поэтому у меня много данных, мне нужно сделать это для всех данных? OO plus У меня есть тот же код в другом контроллере/форме, и он отлично работает ... –

+0

@MoatezBouhdid Да, но это не обычный способ сделать это. Поскольку вы используете фабрику и передаете ей данные формы (объект $ scope.user), вы должны создать эту фабрику таким образом, чтобы не было необходимости обращаться к форме внутри ' success (...) 'или' error (...) '. – Titus

+0

Спасибо за ваши ответы, но я не уверен, что это причина ответа. Как я уже сказал, у меня есть тот же код в другом контроллере/форме, и он отлично работает (когда я говорю то же самое, я просто изменил переменную проекта с пользователем, это все), –

0

Вы должны попытаться напечатать в консоли имя пользователя с помощью:

console.log("controller set : ", $scope.user.firstname); 

конкатенации console.log("controller set : " + $scope.user.firstname) пытается превратить ваш user.firstname объект в строку.

+0

Спасибо за ваш ответ, но он должен работать даже с '$ scope.user.firstname' –