Флажок Angularjs проверял все почему? [Дубликат]

Во-первых, вам нужно иметь четкое представление о scope и поведении ключевого слова this в контексте scope.

scope

there are two types of scope in javascript. They are : 1) Global Scope 2) Function Scope

, глобальная область относится к объекту window.Variables, объявленные в глобальной области, доступны из любого места. С другой стороны, область функций находится внутри функции. varariable this ключевое слово в глобальной области относится к объекту window. this внутренняя функция также относится к объекту window.So this всегда будет обратитесь к окну, пока мы не найдем способ манипулировать scope , чтобы указать контекст по собственному выбору.

-------------------------------------------------------------------------------- - - - Global Scope - - ( globally "this" refers to window object) - - - - function outer_function(callback){ - - - - // outer function scope - - // inside outer function"this" keyword refers to window object - - - callback() // "this" inside callback also refers window object - - } - - - - function callback_function(){ - - - - // function to be passed as callback - - - - // here "THIS" refers to window object also - - - - } - - - - outer_function(callback_function) - - // invoke with callback - --------------------------------------------------------------------------------

this

Здесь у меня есть функция-конструктор, называемая Person. Он имеет свойство, называемое name, и четыре метода, называемые this , sayNameVersion2, sayNameVersion3, sayNameVersion4. Все четыре из них имеют одну конкретную задачу. Возьмите обратный вызов и вызовите его. Обратный вызов имеет определенную задачу, которая заключается в регистрации свойства имени экземпляра функции конструктора Person.

function Person(name){ this.name = name this.sayNameVersion1 = function(callback){ callback.bind(this)() } this.sayNameVersion2 = function(callback){ callback() } this.sayNameVersion3 = function(callback){ callback.call(this) } this.sayNameVersion4 = function(callback){ callback.apply(this) } } function niceCallback(){ // function to be used as callback var parentObject = this console.log(parentObject) }

Теперь давайте создадим экземпляр из конструктора человека и вызывать разные версии name (X относится к 1,2,3,4) методу с niceCallback, чтобы увидеть, как много способов мы можем манипулировать sayNameVersion2 внутри обратного вызова для обращения к экземпляру person.

var p1 = new Person('zami') // create an instance of Person constructor

bind:

Что нужно сделать, так это создать новую функцию с помощью niceCallback установлено на предоставленное значение.

sayNameVersion1 и sayNameVersion2 используют bind для управления this функции обратного вызова.

this.sayNameVersion1 = function(callback){ callback.bind(this)() } this.sayNameVersion2 = function(callback){ callback() }

сначала связать this с обратным вызовом внутри самого метода. И для второго обратного вызова передается связанный с ним объект.

p1.sayNameVersion1(niceCallback) // pass simply the callback and bind happens inside the sayNameVersion1 method p1.sayNameVersion2(niceCallback.bind(p1)) // uses bind before passing callback

bind:

Метод first argument метода person используется как sayNameVersion3 внутри функция, которая вызывается с помощью call

sayNameVersion3 использует first argument , чтобы манипулировать this, чтобы ссылаться на созданный нами объект person вместо объекта window. [ ! d44] this.sayNameVersion3 = function(callback){ callback.call(this) }

и он называется следующим:

p1.sayNameVersion3(niceCallback)

bind:

Как и this , первый аргумент call относится к объекту, который будет обозначен ключевым словом this.

sayNameVersion4 использует this , чтобы манипулировать this, чтобы ссылаться на объект person

this.sayNameVersion4 = function(callback){ callback.apply(this) }

, и он называется следующим. Просто передается обратный вызов,

p1.sayNameVersion4(niceCallback)

1
задан Manoj Suthar 30 November 2015 в 20:40
поделиться

3 ответа

Вы должны привязать каждый вход к другому значению. В настоящее время все они связаны с полем operations в области с помощью ng-model="operations".

Я предлагаю вам создать массив operations в вашем контроллере следующим образом:

$scope.operations = new Array($scope.operations_publish.length);

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

<span ng-repeat="operation in operations_publish">
    <input type="checkbox"
           name="operations"
           ng-model="operations[$index]"
           value="{{operation}}"/>
    {{operation}}
</span>

Это даст вам массив с true во всех проверенных индексах. Если вы хотите, чтобы выбранные значения были строками в массиве, вы можете их собрать следующим образом:

function getSelected() {
    return $scope.operations_publish.filter(function (x,i) {
        return $scope.operations[i]
    });
}

Проверьте полный код этого скрипта .

2
ответ дан lex82 20 August 2018 в 17:06
поделиться
  • 1
    Благодарю. Он ответил на мой вопрос, и теперь я получаю значения в массиве. Однако, когда я пытаюсь отправить объект JSON на контроллер Spring, я получаю сообщение об ошибке: 400 (Bad Request). Любая идея, что могло бы вызвать это? – Manoj Suthar 1 December 2015 в 06:50
  • 2
    Нет, извините, это действительно сложно сказать без дополнительной информации. Вы изучили запрос в своем браузере? Я имею в виду, получить фактический URL-адрес, который был запрошен, и параметры HTTP? – lex82 1 December 2015 в 08:24

Вы пытались?

<input type="checkbox" ng-model="cbValues[$index]"
    ng-repeat="value in cbValues track by $index" />

Работает для меня: http://plnkr.co/edit/s0rZiMeL4NvpFZ3C9CIL?p=preview

0
ответ дан Igloob 20 August 2018 в 17:06
поделиться

В соответствии с вашим примером, указанным здесь, вы привязали свой ng-model к выражению operations, однако вам нужно привязать его к отдельному итератору operation (from) ng-repeat="operation in operations_publish".

Затем вы можете установить эти данные в свой объект dataLog:

var dataObj = {
    "operationType" : $scope.operationType,
    "conceptModelID" : $scope.conceptID,
    "requestor" : $scope.requestor,
    "status" : "new",
    "requestDateTime" : null,
    "lastExecutedDateTime" : null,
    "completedDateTime" : null,
    "instructions" : $scope.operations_publish
};

Связывание данных по умолчанию в угловых многонаправленных, поэтому:

  1. operations_publish => связанный с строкой через итератор operation
  2. operation => привязан к значению флажка через ng-model
  3. Когда значение флажка изменяется, вы меняете переменную, to и набор, из которого переименована переменная.
0
ответ дан Sean Larkin 20 August 2018 в 17:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: