Флажок не привязка к области в angularjs



Я пытаюсь привязать флажок к области с помощью ng-модели. Начальное состояние флажка соответствует модели области действия просто отлично, но когда я устанавливаю/снимаю флажок, модель не меняется. Некоторые вещи, чтобы отметить, что шаблон динамически загружается во время выполнения с помощью ng-include



app.controller "OrdersController", ($scope, $http, $location, $state, $stateParams, Order) ->

$scope.billing_is_shipping = false
$scope.bind_billing_to_shipping = ->
console.log $scope.billing_is_shipping


<input type="checkbox" ng-model="billing_is_shipping"/>


когда я проверить в окне консоли журналы ложной, когда я снимите флажок, консоли опять журналы ложной. У меня также есть модель заказа на область, и если я изменю флажок модель для заказа.billing_is_shipping, он отлично работает

610   4  

4 ответов:

Я некоторое время боролся с этой проблемой. Что сработало, так это привязка ввода к объекту вместо примитива.

<!-- Partial -->
<input type="checkbox" ng-model="someObject.someProperty"> Check Me!

// Controller
$scope.someObject.someProperty = false

если шаблон загружен с помощью ng-include, вы должны использовать $parent получить доступ к модели, определенной в родительской области, начиная с ng-include Если вы хотите обновить, нажав на флажок.

<div ng-app ng-controller="Ctrl">
    <div ng-include src="'template.html'"></div>
</div>

<script type="text/ng-template" id="template.html">
    <input type="checkbox" ng-model="$parent.billing_is_shipping" ng-change="checked()"/>
</script>

function Ctrl($scope) {
    $scope.billing_is_shipping = true;

    $scope.checked = function(){
        console.log($scope.billing_is_shipping);
    }
}

демо

в моей директиве (в ссылке функция) я создал переменную scope успехов такой:

link: function(scope, element, attrs) {
            "use strict";

            scope.success = false;

и в области шаблона включен входной тег, как:

<input type="checkbox" ng-model="success">

это не работа.

в конце концов я изменил свою переменную scope, чтобы выглядеть так:

link: function(scope, element, attrs) {
            "use strict";

            scope.outcome = {
                success : false
            };

и мой тег input выглядеть так:

<input type="checkbox" ng-model="outcome.success">

теперь он работает, как ожидалось. Я знал объяснение этому, но забыл, может быть кто-нибудь заполнит его для меня. :)

расширения ответ Мэтта, пожалуйста, смотрите это Egghead.io видео, которое решает эту самую проблему и дает объяснение: Почему привязка свойств непосредственно к $ scope может вызвать проблемы

см.:https://groups.google.com/forum/#! тема / угловая/7Nd_me5YrHU

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

рекомендуется никогда не привязывать непосредственно к переменной в области видимости в Ан ng-model, Это также известно, как всегда, включая "точку" в ваш ngmodel.

Comments

    Ничего не найдено.