2015-04-17 2 views
0

Я начинаю с AngularJS. Тем не менее, я не могу обновить значение $ rootScope после отправки формы, оно возвращается как неопределенное.

Контроллер:

app.controller('campaignCtrl', ['$scope', '$rootScope', function($scope, $rootScope) { 
    $scope.submit = function() { 
    $rootScope.campaign = this.campaign; 
    }; 

}]); 

И форма:

<form class="holder" name="campaignForm" ng-submit="submit()" > 
     <div class="form-group" show-errors> 
     <label for="inputDate">Date</label> 
     <p class="help-block"><em>Ex: 12/10/2015</em></p> 
     <input type="date" class="form-control" name="inputDate" ng-model="campaign.date" id="inputDate" required> 
     </div> 
    <button type="submit" class="btn btn-lg btn-default pull-right">Submit</button> 
</form> 
+0

Что такое 'this' внутри этой функции? Я уверен, что это не то, что вы думаете, и вы назначаете undefined '$ rootScope.campaign'. – tandrewnichols

+1

Я не уверен в вашем использовании 'this' в этом контексте. Ваш объект 'campaign' моделируется в' $ scope', поэтому, скорее всего, вы хотите, чтобы это было '$ rootScope.campaign = $ scope.campaign' – brettvd

+0

Я пробовал это, и не было успеха с ним .. $ rootScope .campaign все еще не определено: ( – urieljuliatti

ответ

0

Я использовал свой код и добавил $watch на $rootScope.campaign и он работал большой.

.controller('someController', function($scope, $rootScope) { 
    $scope.submit = function() { 
     $rootScope.campaign = $scope.campaign; 
    }; 

    $rootScope.$watch('campaign', function(newVal, oldVal) { 
     if(newVal !== oldVal) { 
      console.log("New Val = "); 
      console.log(newVal); 
     } 
    }); 
}); 

JSFiddle

Если вы ищете что-то, что сохраняется через обновление страницы, то есть не $rootScope. Посмотрите на что-то вроде этого: AngualrJS: sustaining data on html refresh

+0

Он работал как шарм! Теперь я попытаюсь сохранить его на странице обновления. Благодаря! – urieljuliatti

+0

Могу ли я передать переданное значение на странице обновления в сервисе/фабрике? – urieljuliatti

0

Попробуйте

$scope.submit = function() { 
    $rootScope.campaign = $scope.campaign; 
}; 

EDIT:

Попробуйте удалить type="submit" из вашей кнопки. Возможно, ваш обработчик не вызван, потому что браузер обрабатывает форму отправки автоматически (хотя вы можете проверить это, поставив журнал в эту функцию).

<button class="btn btn-lg btn-default pull-right">Submit</button> 

EDIT 2:

За нашу беседу с помощью комментариев: $rootScope не сохраняются между запросами. Вам нужно будет хранить его где-то постоянным (например, локальное хранилище или файл cookie) или передать его на сервер, а затем вернуться к клиенту, если вы хотите сохранить это значение. Бьюсь об заклад, если вы добавите в журнал, что функция $scope.submit, это будет.

+0

Такая же проблема .. Это не обновление глобальной переменной кампании $ rooScope .. = ( – urieljuliatti

+0

Хорошо, у меня есть и другая идея. – tandrewnichols

+0

Еще раз спасибо за ваш ответ! К сожалению, переменная $ rootScope пока не обновляется. Несколько часов назад я пытался обновить массив внутри службы из этого же действия отправки, и массив также не обновлялся. Итак, я пришел к этому простому примеру с переменными $ rootScope, чтобы понять, почему глобальное значение не обновляется после отправки формы. – urieljuliatti

0

Проверьте это. Ваш код кажется правильным исключением того, что вам не хватает закрывающий тег на входе

`http://jsfiddle.net/ashishmusale/2001cf6r/` 
+0

Входы не требуют закрытия тегов. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input – tandrewnichols

+0

хорошо знаю, я получал ошибку в jsfiddle, поэтому я предложил. Кажется, что код работает нормально Я возвращаюсь Object {date: "2015-04-17"} для $ rootScope.campaign –

Смежные вопросы