Значение по умолчанию angularJS для ng-модели

Возможно ли, чтобы ng-модели получили значения по умолчанию, например ''?

У меня есть форма, на которой я использовал функцию jQuery serialize, и всякий раз, когда какое-либо значение отсутствует, оно все равно будет включать ее в сериализованные данные, например. {name: '', age: ''}.

Однако, когда я использую try, используя его проводку, используя Angular $http и получая модель от $scope, она появляется как undefined, когда она пуста.

Ответ 1

Вы можете просто определить свойства модели в области перед их использованием в своем представлении.

Если вы укажете свой код контроллера, я покажу вам, что вам нужно обновить, чтобы добавить их в область.

Он должен выглядеть примерно так:

В вашем js файле, который определил приложение

angular.module("MyModule", []).controller('MyCtrl', ['$scope', function ($scope) {
    $scope.myModel = {name:""};
}]);

В вашем HTML

<input type="text" ng-model="myModel.name"/>

Примечание Я предпочитаю не иметь глобальных переменных/функций, поэтому я использую другой синтаксис, предоставленный Angular, чтобы избежать этого и разрешить мини-настройку.

Ответ 2

Вы также можете попробовать:

<div ng-init="foo={}">
    <input type="text" ng-model="foo.name=''"/>
</div>

или

<input type="text" ng-init="foo.name=''"/>

он представит:

foo = { name: '', .... }

Ответ 3

Вам не нужно использовать сериализацию jQuery.

Ваша форма должна быть привязана к области видимости следующим образом:

<form ng-controller="MyCtrl" ng-submit="submit()">
    <input type="text" name="name" ng-model="formData.name">
    <input type="text" name="age" ng-model="formData.age">
    <input type="submit" value="Submit Form">
</form>

function MyCtrl($scope) {
    $scope.formData = {};

    $scope.submit = function() {   
        $http.post('/someUrl', $scope.formData)
    };
}

Так что в $http вы можете просто передать $scope.formData.

Есть ли более эффективный способ сериализации формы с помощью angularjs?

Ответ 4

Иногда вы не знаете, установлено ли значение или нет. Для чего нужны значения.

Я использую это, когда мне нужно убедиться, что переменная имеет некоторое значение. Вы можете установить его в своем контроллере

$scope.possiblyEmptyVariable = $scope.possiblyEmptyVariable || "default value";

Отлично работает без Angular

// some object that may or may not have a property 'x' set
var data = {};

// Set default value of "default"
// carefull, values like 'null', false, 0 will still fall to defaults
data.x = data.x || "default";

// Set default value of "default"
// this will not fall to defaults on values like 'null', false, 0
data.x = !"x" in data || "default"; 

Если вам нужно установить кучу значений, используйте angular.extend или jQuery.extend

data.z = "value already set";
var defaults = { x: "default", y: 1, z: "default" };
var newData = angular.extend({}, defaults, data);
// { x: "default, y: 1, z: "value already set" }

Надеюсь, что поможет