2013-07-01 5 views
10

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

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

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

+1

В контроллере, попробуйте добавить '$ scope.your_model_name_here =«»' –

+0

Я пробовал, но это привело к полной модели является пустой строкой, и даже не пустой объект. Тем не менее, явно инициализируется одно свойство в то время, как в ответе shaunhusain. – whirlwin

ответ

9

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

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

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

В файле JS, который определил приложение

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

В вашем HTML

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

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

+0

Кажется, это так, как сейчас. – whirlwin

+0

Да, конечно, имейте в виду, я все еще немного Angular noob, но я использовал его с большим успехом на трех проектах сейчас, один из которых я сейчас работаю, является самым большим до сих пор, но все одинаковые концепции применяются независимо от масштаба. Просто научитесь создавать контроллеры, службы и директивы, и вы можете сделать что угодно, плюс есть уже довольно значительное сообщество, похоже, и множество замечательных компонентов (ng-grid, google-maps, чтобы назвать пару). Никогда не был парнем jQuery, я прыгнул прямо из AS3/Flex, так что он довольно знакомый и чистый. Snags - это в основном обновления для меня. – shaunhusain

+0

Да, я определенно с нетерпением жду использования Angular в будущих проектах, а не только * jQuery. – whirlwin

1

Вам не нужно использовать сериализацию 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.

Is there a more effective way to serialize a form with angularjs?

+0

Это то, что я сейчас делаю. Однако основная проблема заключается в том, что он останется пустым объектом ('{}'), и не будет интересоваться неопределенными значениями, когда вы скажете '$ scope.formData'. Мне нужно что-то, что обеспечивает пустые значения. – whirlwin

+1

О, я вижу. В этом случае определите объект в своей области следующим образом: $ scope.formData = {'name': null, 'age': null}; – StuR

10

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

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

или:

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

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

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

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

+0

Рад помочь: D – Neaped

0

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

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

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

Работает отлично без угловых и

// 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.расширить

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" } 

Надежда, что помогает