Флажок не привязка к области в 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, он отлично работает
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