Interesting inquiry.
While not a direct answer, this can be seen as explanations to potential issues and solutions that may arise. This scenario is common, so it's crucial to grasp. The response from @Victor is satisfactory and the input from @Atias is also valuable.
Breakdown -
Basic breakdown : ng-repeat creates child scopes.
More detailed explanation :
In your application, there are 3 scopes (potentially more based on $scope.radioButtons values). Let's name them - parentScope (main scope), childScope1 (first element of ng-repeat), and childScope2 (second element of ng-repeat).
Main scope variables: calledFunctions (array), radioButtons (object), and newValue (function).
ChildScope1 variables: name (initially assigned a literal), val (initially assigned an object), and value (currently undefined).
ChildScope2 variables: name (initially assigned a literal), val (initially assigned an object), and value (currently undefined).
What occurs when you click the radio button in childScope1 (first time):
ChildScope1.value = ChildScope1.name or ChildScope1.value= "Radio1"; due to ng-change directive detecting a model change (from undefined to a literal "Radio1"), triggering ChildScope1.newValue() which doesn't exist, leading to a call to parentScope.newValue().
Note: ChildScope1.value= "Radio1";
After clicking other radio buttons......
If you click ChildScope1's radio button again: no change in value means no function calls beyond this point.
The same process applies to ChildScope2.
This explains the one-time binding behavior in your fiddle, echoing insights from @Victor and @Atias.
Solution: Ensure ng-model in ChildScope1, ChildScope2, or any child scopes points to a parent scope variable using $parent or creating an object with properties in the parent scope (e.g., ParentVal={ChildVal = ""}), written in ng-model inside ng-repeat as ng-model=ParentVal.ChildVal.
Apologies for any language errors; thank you for your understanding.
Gratitude