2017-02-13 51 views
0

我有以下代码:NG-点击不发送更新值

<div class="input-field col s3" ng-repeat="data in content.data"> 
<input class="updatable mcq" 
     ng-disabled="!viewMode" 
     type="checkbox" 
     id="mcq{{data.surveyPropertyId}}" 
     ng-click="updateMCQ(data.surveyPropertyId,data)" 
     ng-model="data.value"/> 
<label for="mcq{{data.surveyPropertyId}}">{{data.name}}{{data.value}}</label> 

$scope.updateMCQ = function(surveyPropertyId,newValue){ 
           console.log(newValue); 
          } 

问题是,它在updateMCQ功能它显示的data.value

但是如果正确的价值我在这个输入元素上触发一个点击事件,它显示先前选择的值。例如,如果复选框被选中,它将发送错误。

而且{{data.name}} {{data.value}}正在评估和正确改变为选中/取消选中此元素

可以采取什么问题

UPDATE:

我发现了这个问题,它是一个愚蠢的问题。当我调用$('。updatable.mcq.ng-dirty'),触发('click')或改变时,它实际上改变了,现在元素值已经改变了。

现在任何人都可以指导我如何创建一个自定义指令,其行为就像点击或更改angularjs一样的事件?

+0

请加'updateMCQ'函数。 – Sravan

+0

另一种方法是在数据对象中使用isSelected变量。像这样的东西; {surveyPropertyId:1,value:'something',isSelected:false} – Laazo

+0

添加isSelected变量在这里是不可行的,因为我不提前知道有多少个复选框会存在,并且不想遍历它们。我使用$('。updatable.mcq.ng-dirty')。trigger('click')来调用updateMCQ函数 – ArslanAnjum

回答

0

我已经找到了问题和它的一个愚蠢的一个。当我调用$('。updatable.mcq.ng-dirty'),触发('click')或改变时,它实际上改变了,现在元素值已经改变了。

+0

使用带有角度的'jquery'并不是很好,试着对这些东西使用'ng-change'和'ng-model'等'angular-directives'。 – Sravan

0

您应该使用NG-变化,如:

ng-change="updateMCQ(data.surveyPropertyId,data)" 
+0

检查。没有帮助 – ArslanAnjum

+0

请添加提琴手。 – Jenny

0

您可以使用ng-change以及由@Jenny表示,它将为你工​​作。

下面是代码,

<!DOCTYPE html> 
 
<html> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<body> 
 

 
<div ng-app="myApp" ng-controller="myCtrl"> 
 

 
<div class="input-field col s3" ng-repeat="data in content"> 
 
<input type="checkbox" ng-model="data.value" ng-change="updateMCQ('data.surveyPropertyId',data)"> click and check console 
 

 
{{data}} 
 

 
</div> 
 
</div> 
 

 
<script> 
 
var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 
    $scope.firstName = "John"; 
 
    $scope.content =[{ value: false },{ value: false },{ value: true }] 
 
    $scope.updateMCQ = function(surveyPropertyId,newValue){ 
 
       console.log(newValue); 
 
    } 
 
}); 
 
</script> 
 

 
</body> 
 
</html>

请运行上面的代码。

Check this demo