2015-01-02 38 views
1
myApp.controller("MyCtrl",function ($scope) { 
    $scope.value1= '0'; 
    $scope.$watch('value1', function(value) { 
    alert(value); 
    }); 
}); 

JS代碼:單選按鈕值的變化不是AngularJS工作

var myApp = angular.module('myApp',[]);  
function MyCtrl($scope) { 
    $scope.value1= '0'; 

    $scope.$watch('value1', function(value) { 
     alert(value); 
    }); 
} 

HTML代碼:

<div ng-controller="MyCtrl"> 
<span ng-repeat="i in [0, 1, 2]"> 
    <input name="asdf" ng-model="value1" value="{{i}}" type="radio"> 
</span>  
<hr> 
{{value1}} 
</div> 

警報顯示在僅加載。之後,value1僅顯示初始值,即0

Demo

+0

你必須控制你的角度應用 –

回答

3

它實際上的範圍問題。我在http://jsfiddle.net/ucf02Lxz/2/修改了這個例子。看一看。基本上你需要使用一個對象來修改父範圍的值。

var myApp = angular.module('myApp',[]); 

myApp.controller('MyCtrl', function($scope) { 
    // an object to prevent problem 
    $scope.data = {}; 
    $scope.data.value1 = '0'; 

    $scope.$watch('data.value1', function(value) { 
     alert(value); 
    }); 
}) 

<div ng-controller="MyCtrl"> 
    <span ng-repeat="i in [0, 1, 2]"> 
     <input name="asdf" ng-model="data.value1" ng-value="i" type="radio" /> 
    </span>  
    <hr /> 
    {{data.value1}} 
</div> 

更多的https://github.com/angular/angular.js/wiki/Understanding-Scopes

+1

我知道你的鏈接有註冊,但它可能是值得加入一個簡短的摘要答案?例如。這是一個與JavaScript相關的警告,而不是AngularJS:ng-repeat創建了自己的子範圍,這些範圍從父範圍原型繼承。任何對子對象的繼承基元值(如字符串,數字,布爾值)的寫/設置將只設置子對象而不是父對象的值。 –

+0

@ReinardMavronicolas你是完全正確的。謝謝你指出。我會修改答案以包含更多數據。 –