I'll just chime in here to clear something up, ng-if does create a child scope but this does not mean you cannot access objects on the parent scopes from inside it.
The issue is more with setting values inside a child scope. If you output a variable onto a child scope it wont be visible in the parent scope or any of the sibling scopes. You can solve this by creating an object inside the parent scope then setting properties on the object inside the child scopes. e.g.
This works:
<label><input type="checkbox" ng-model="showInput"> Show Input</label>
<div ng-init="parentScopeObj={}">
<div ng-if="showInput">
<!-- we are now inside a child scope -->
<input ng-model="parentScopeObj.myName">
</div>
<p>My name is {{parentScopeObj.myName}}</p>
</div>
This doesn't:
<label><input type="checkbox" ng-model="showInput"> Show Input</label>
<div">
<div ng-if="showInput">
<!-- we are now inside a child scope -->
<input ng-model="myName">
</div>
<p>My name is {{myName}}</p>
</div>