更改angularJS中指令的作用域变量
Change scope variable from directive in angularJS
我对Angular很陌生,遇到了以下问题:
我有一个列表视图和一个带有一些标签的详细信息视图。我创建了一个指令来更改路由(到列表视图),并在单击事件时从服务加载新元素。我想要的是,点击事件还更改了一个范围变量,这样我就可以在列表视图中显示/隐藏一个清除过滤器的按钮。
实际上,我可以从指令中更改变量,但当变量更改时,按钮不会用ngIf/ngShow/ngHide显示/隐藏。
我在指令和控制器中都尝试了$scope.$apply
。我尝试从控制器调用toggle
函数,并直接在指令中更改变量,但没有成功。
我试着从另一个按钮调用toggle函数,它运行得很好!
这是我的代码:
在这里,我尝试更改指令中的变量和$apply
:
.directive('filterTag', function(getFeed, $location) {
return {
restrict: 'A',
controller: 'mainController',
link: function(scope, element, attrs) {
element.bind('click', function() {
$location.path('/list');
scope.filtered = true;
scope.$apply();
return getFeed.getTagged(this.text);
});
}
}
})
这是在控制器内部:
$scope.filtered = false;
$scope.toggleFiltered = function() {
$scope.filtered = !$scope.filtered;
}
$scope.$watch('filtered', function() {
alert('filtered: ' + $scope.filtered);
});
我使用$watch来确保变量的更改是正确的,无论是从指令还是从切换按钮。
如果应用了过滤器,这是我想要显示/隐藏的按钮(这在列表视图中):
<button type="button" ng-show="filtered">Clear filter</button>
我试着添加这个按钮来检查我是否遗漏了什么或语法错误,但它非常适合
<button type="button" ng-click="toggleFiltered()">toggle filter</button>
在过去的两天里,我一直在寻找答案,但找不到答案。无法解决我的代码的问题。
此处的工作示例
您可以在两个控制器(不同的作用域)之间共享'filtered',因此您可以使用$rootScope
来实现这一点,也可以使用这样的service/factory
。当'filtered'在任何控制器中更改时,它将在另一个控制器中更改!
使用$rootScope.filtered而不是$scope.filtered,您可以在模块的run()函数中初始化$rootScope.filtere。
相关文章:
- 当我更新另一个作用域变量时,作用域变量会自动更新
- 如何在隔离作用域指令中访问此作用域变量
- 正在向构造函数添加作用域变量
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- 作用域变量未从状态父控制器继承到子控制器
- 插槽:访问作用域变量
- 在另一个作用域变量中使用AngularJS作用域变量
- 在Angular.js中通过检查作用域变量进行过滤
- 如何更新作为属性传入的作用域变量
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- 从$http.get调用更新Angular作用域变量
- AngularJS ui路由器:访问子作用域变量
- 访问AngularJS中函数中的作用域变量
- 为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
- 修改作用域变量后,未更新作用域绑定
- 控制器作用域变量在刷新之前未加载
- 将Angular作用域变量的字符串描述传递给指令
- 将内部作用域变量绑定到外部“模板”
- 无法在 $.post 回调中设置作用域变量
- 如何从在 JS 中用作参数的匿名函数中分配外部作用域变量