Я получаю правильную запись из массива firebase с помощью $ getRecord, но я не могу сохранить изменения, внесенные в поля ввода. Наш Add Controller работает. Что мы сделали не так? Может ли кто-нибудь помочь? Спасибо!
Редактировать контроллер
app.controller("EditRecipeController", function($scope, $location, $routeParams, $firebaseArray) {
$scope.recipes.$loaded().then(function(recipeid) {
$scope.recipe = recipeid.$getRecord($routeParams.id);
$scope.editRecipe = function(recipe) {
$scope.recipes.$save(recipe).then(function() {
})};});});
Добавить контроллер
app.controller("AddRecipeController", ["$scope", "createRecipes", function($scope, createRecipes) {
$scope.recipes = createRecipes;
$scope.addRecipe = function() {
$scope.recipes.$add({
title: $scope.title,
lead: $scope.lead,
keyword: $scope.keyword,
ingredient: $scope.ingredient,
instructions: $scope.instructions
});
alert("Your recipe has been succefully saved!")
// reset the recipe input
$scope.recipe = "";
};}]);
завод
app.factory("createRecipes", ["$firebaseArray",function($firebaseArray) {
var ref = new Firebase("https://fiery-inferno-8595.firebaseio.com/recipes/");
return $firebaseArray(ref);}]);
HTML
<section id="{{recipe.$id}}" class="recipe-description editor">
<form ng-submit="addRecipe()">
<section class="headColumn">
<div class="mySearch">
<span>My search: </span>
<span ng-bind="search.$"></span>
</div>
<h2>
<input type="text" ng-model="title" name="recipeTitle" ng-value="recipe.title" required="">-
<input type="text" ng-model="lead" name="recipeLead" ng-value="recipe.lead" required="">
</h2>
<ul class="keywords">
<li><label></label>Categories: </li>
<li ng-repeat="keyword in keywords track by $index">
<input type="text" ng-model="keywords[$index]" name="recipeKeyword" ng-value="recipe.keywords" placeholder="Add a keyword">
<button class="remove-field" ng-show="$last" ng-click="removeKeyword()">-</button>
</li>
<button class="add-field" ng-click="addKeyword()">+</button>
</ul>
</section>
<section class="sideColumn">
<h4>Ingredients</h4>
<ul class="ingredients">
<li ng-repeat="ingredient in ingredients track by $index">
<input type="text" ng-model="ingredients[$index]" name="recipeIngredient" ng-value="recipe.ingredients" placeholder="Add an ingredient">
<button class="remove-field" ng-show="$last" ng-click="removeIngredient()">-</button>
</li>
<button class="add-field" ng-click="addIngredient()">+</button>
</ul>
</section>
<section class="mainColumn">
<div class="readytime">
<h4>Time until ready</h4>
<ul>
<li>
<span>Preperation Time: </span>
<input type="text" ng-model="preptime" name="recipePreptime" ng-value="recipe.preptime" placeholder="Add preperation Time">
</li>
<li>
<span>Cooking Time: </span>
<input type="text" ng-model="cookingtime" name="recipeCookingtime" ng-value="recipe.cookingtime" placeholder="Add cooking Time">
</li>
</ul>
</div>
<div class="instructions">
<h4>Instructions</h4>
<!--TO DO: This input should work like textarea -->
<input type="text" ng-model="instructions" name="recipeInstructions" ng-value="recipe.instructions">
</div>
</section>
<button ng-click="addRecipe()" ng-hide="recipe" type="submit">Save the Recipe</button>
<button ng-click="editRecipe()" type="submit" ng-show="recipe">Update the Recipe</button>
</form>
Вы редактируете функцию:
$scope.editRecipe = function(recipe){ $scope.recipes.$save(recipe).then(function(){}); }
ожидает, что "рецепт" будет принят, но я не вижу, чтобы его передавали в любом месте. Похоже, вы сохраняете текущий рецепт:
$scope.recipe
поэтому, если $scope.recipe
имеет правильный объект, я думаю, вам просто нужно сохранить рецепт с областью, противоположный его передаче.
$scope.editRecipe = function(){ $scope.recipes.$save($scope.recipe).then(function(){}); }
app.controller("EditRecipeController", function($scope, $location, $routeParams, $firebaseArray) { $scope.recipes.$loaded().then(function(recipeid) { $scope.recipe = recipeid.$getRecord($routeParams.id); }) $scope.editRecipe = function(){ $scope.recipes.$save($scope.recipe).then(function(){}); } });
Привет, Кайл! Спасибо за помощь. Я изменил функцию, но она все еще не работает. Console.log ($ scope.recipe) показывает мне, что рецепт не изменился. Есть другие идеи? Еще раз большое спасибо!{ title: $scope.title, lead: $scope.lead, keyword: $scope.keyword, ingredient: $scope.ingredient, instructions: $scope.instructions }
модели:{ title: $scope.title, lead: $scope.lead, keyword: $scope.keyword, ingredient: $scope.ingredient, instructions: $scope.instructions }
но когда вы сохраняете $ save (), вы не обновляете фактические значения - вы отображаете их только с помощью ng-value. Вы должны сделать так, чтобы ваши ng-модели указывали на выбранное место в синхронизированном массиве. Поэтому, не меняя логику кода, вам придется добавить recipe.whither для всех моделей. Есть смысл?