2014-09-01 65 views
3

以外纳克元件我没有经验的具有角。使用纳克控制器

我使用的角度来创建一系列网页上的嵌套的div(一种形式)的。顶部div有ng-controller="controllername"作为属性。在嵌套divs是一个与ng-show="showvar"作为属性的div。

看起来像这样。

<div class="page"> 
    <div ng-controller="controllername"> 
    <div ng-show="showvar">Hidden Stuff</div> 
    </div> 
</div> 

当我执行上showvar功能,使其真正出现在div(当假消失)如预期。

我也有一个完全独立的div“外部”的原与NG-控制器属性的div巢。因此,在这个单独的层次结构中没有ng-controller属性,但是我用ng-show="showvar"属性嵌套了另一个div。

更新的HTML结构是这样

<div class="page"> 
    <div ng-controller="controllername"> 
    <div ng-show="showvar">Hidden Stuff</div> 
    </div> 
    <div class="seperate"> 
    <div ng-show="showvar">More Hidden Stuff</div> 
    </div> 
</div> 

页面加载,既的div与在单独的巢被隐藏作为ng-hideng-show="showvar"已由角追加。当我在页面加载之后执行showvar上的功能以使其成功时,只显示ng-controller div中的div。

我(觉得我)明白这是因为ng元素在页面加载时被评估(并且附加了ng-hide,甚至在控制器之外?),但是只有ng-controller属性的div中的ng元素是在页面加载后执行功能时评估。它是否正确?

我怎样才能得到其他NG-节目被评估NG控制器DIV的“外部”?

我在想一个选项是NG-控制器附加到整体页面'DIV,而不是div嵌套。但我还有什么其他选择?

编辑:我也想简单地增加ng-controller="controllername"到单独的股利。我猜角'忽略'重复ng控制器div?

+0

是它必须有你的其他分区之外?请注意,你可以使它看起来像在外面用css,例如'位置:绝对;'。 – 2014-09-01 13:49:35

+0

是的,position:绝对是我尝试通过单独的div来解决的问题 – myol 2014-09-01 14:11:43

+0

您可以注入'$ rootScope'为整个页面创建一个变量。 – 2014-09-01 14:16:34

回答

1

问题你面对的是showvar位于您的控制器范围内,您的第二次使用showvar不在该范围内。

你需要做的是确保变量在需要的地方可用。

说你的变量添加到parentController(你没有一个在你的榜样,我得加一个)

<div class="page" ng-controller="parentController"> 
    <div ng-controller="controllername"> 
    <div ng-show="showvar">Hidden Stuff</div> 
    </div> 
    <div class="seperate"> 
    <div ng-show="showvar">More Hidden Stuff</div> 
    </div> 
</div> 

app.controller('ParentController', function($scope){ 
    $scope.showvar = false; 
}); 

问题,这是当您在controllername控制器内设置showvar为真它会将其设置在innerscope中,而不是外部。当通过另一个对象访问它时确保你有合适的范围,你应该是安全的。

因此,尝试这样的:

<div class="page" ng-controller="parentController"> 
    <div ng-controller="controllername"> 
    <div ng-show="obj.showvar">Hidden Stuff</div> 
    </div> 
    <div class="seperate"> 
    <div ng-show="obj.showvar">More Hidden Stuff</div> 
    </div> 
</div> 

app.controller('ParentController', function($scope){ 
    $scope.obj = { 
    showvar: false 
    } 
}); 

Quick demo

1

这里你的问题是,你以2个“showvar”变量结束:一个在“controllername”范围内,另一个在应用范围内(因为你在你的html父页中有一个ng-app声明“div)。

加载页面时,第一个div的控制器作用域中显示为“showvar”的值,而“separate”一个则在应用程序作用域中显示“showvar”变量,因此它被解析为“假”(即使角度在你的应用范围内为你声明,你甚至可以在以后修改它的值)。

当您更改控制器范围“showvar”的价值,它不会改变一个在应用范围,使得“独立”的div永远留藏=)

+0

Thankyou中不满意的角度来解释角度解决页面加载中的元素的问题 – myol 2014-09-01 13:55:56

+0

请您接受答案,然后呢? =) – 2014-09-01 16:42:29

+0

我欣赏你的解释,因此得到了赞赏。然而@ red-X提供了解决方案和演示,所以我觉得有理由接受他的回答 – myol 2014-09-02 12:13:49