AngularJS的第一个ng类作品,第二个不
AngularJS 1st ng-class works 2nd doesn't
我有以下内容:
<div data-ng-controller="resultsController">
<div id="DIV1" ng-include src="'views/sidebar.html'" ng-class="showSidebar ? 'open' : 'closed' "></div>
<div id="DIV2" ng-class="showSidebar ? 'open' : 'closed' "></div>
和(ng-include src="'views/sidebar.html'")^我有下面的div与ng-click,触发更改showSidebar
<div class="panel-header top-sidebar" ng-click="showSidebar = !showSidebar; ">
美元范围。在resultsController中,当ng-click被调用时,DIV1上的ng类生效,但DIV2上不起作用。
任何想法?
有两种方法可以解决这个问题:
1。不是想要的方式
使用$parent
访问父作用域。
<div class="panel-header top-sidebar"
ng-click="$parent.showSidebar = !$parent.showSidebar; ">
只需要访问基本类型的parent,而不需要访问对象。所以:
2。正确方式
适当的方法是在模型对象的作用域内设置标志showSidebar
,如
$scope.someModel = { showSidebar: true }
,然后在包含的页面中引用它,因为当您使用ng- include时,会在父范围之外创建一个新的子范围。但是在这种情况下,由于您引用的是对象引用,因此更改将反映在子范围和父范围中。
这是一个DEMO。点击文本"Inside"查看更改ng-include
创建自己的$scope
,因此您的showSidebar不会传播到DIV2,因为它不在它的范围内。我的建议是:为侧边栏创建一个服务。并将其包含在正确的控制器中。
编辑
创建一个名为sidebar
的服务并将其注入到控制器中
app.controller('mainCtrl', ['$scope', 'sidebar', function($scope, sidebar){
//track sidebar
$scope.sidebar=sidebar;
}]);
这样你就可以给你的侧边栏属性和方法,你可以在你的视图中访问。
相关文章:
- IE11中的第二个调用取消了第一个Fetch API调用
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 我的设备后退按钮工作不正常,它转到第一个html,但返回到第二个html
- 第一个jquery事件正在发生,但没有发生第二个事件
- 按第二个 ng 重复值排序第一个 ng 重复
- 第二个 Jquery json 在第一个 Jquery 完成之前被解雇
- 如果第二个 html 元素位于第一个 html 元素上方,如何移动该元素
- JS深度比较2个对象并删除在第二个对象中找到的项目,而不是第一个
- 为什么我添加的第二个jQuery代码部分/新的CSS部分导致第一个jQuery代码在我的页面上不起作用
- 在 javascript 中创建第二个 html 元素会删除第一个
- 如何在第一个 php 脚本中访问变量 'a' 的值到第二个 php 脚本,并通过 ajax 调用链接
- 数组中的第一个视频始终是第一个或第二个在下一个视频功能上播放
- 第二个 JS 按钮触发第一个 JS 按钮
- 第二个 jQuery toggle() 文件破坏了第一个 toggle() 方法
- 如何以第二个 JavaScript 形式加载数据,然后解析为第一个 JavaScript 形式
- 在表中第一个tr的倒数第二个td中选择按钮-使用jQuery选择器
- 若在第一个字段中选择了日期,则第二个字段的日期应大于第一个
- 如何在angularjs中使用第一个api的结果,进入第二个api调用
- (HTML / JS)添加“,“在第二个最后一个字串和隐藏"&"如果字符串中有一个单词
- .children(“:第一个children”)-ajax-多个第一个children