在具有不同控制器的视图中使用ng-click和指令函数
using ng-click with a directive function inside a view with a different controller
我有这个html:
<button ng-click="reset()">
<div ng-controller="anotherController" class="container">
<directive data="{{ datafordirective }}"></directive>
</div>
指令:
app.directive('directive', function(){
return {
restrict: 'AE',
scope:{ data: '=', someAction: '=', reset: '='},
link: function(scope, element, attrs){
scope.reset = function(){
//reset dataset
};
}
};
});
我在指令中的链接函数中有一个函数来重置数据,但问题是,我使用此按钮的视图和此指令有一个不同的控制器,但指令和此视图控制器都属于同一个应用程序模块('appname',[])。。。
有办法做到这一点吗?在指令范围之外使用scope.reset()函数?
谢谢!
有很多方法可以做到这一点。我将举几个例子:
1.简单(非理想)的
访问指令中的父作用域:
代替:
scope.reset = function() {};
用途:
scope.$parent.reset = function() {};
但是,从子作用域中修改父作用域并不是一个好的做法。这可能会导致对范围继承工作方式的混淆(AngularJS中范围原型/原型继承的细微差别是什么?)。此外,国际海事组织认为,这不是一个很好的概括。
2.一种(稍微)更好的方法
<button ng-click="buttonClicked = true">
<div ng-controller="anotherController" class="container">
<directive data="{{ datafordirective }}" reset="buttonClicked" reset-callback="buttonClicked = false"></directive>
</div>
在这里,我们使用父作用域(buttonClicked
)中的一个属性来通过元素上的属性控制指令。
app.directive('directive', function(){
return {
restrict: 'AE',
scope:{ data: '=', resetCallback: '&', reset: '='},
link: function(scope, element, attrs){
scope.$watch('reset', function(val) {
if (val) {
// reset dataset
scope.resetCallback();
}
});
}
};
该指令将buttonClicked
的值绑定到reset
,然后监视该值的更改,并在更改时重置数据集。
3.另一种更好的方法
创建一个服务来处理数据集上的操作。
app.service('dataset', function() {
this.reset = function() {
// reset dataset
};
});
然后,在父控制器的某个位置,您需要注入dataset
服务并创建一个函数来调用dataset.reset
:
$scope.reset = function() {
dataset.reset();
};
相关文章:
- 如何在 ng-click 函数中更改$rootScope值
- 未找到ng-click函数中的参数
- 如果else为Angular,则使用ng click函数重复ng
- 更改 NG-Click 函数
- AngularJS将$scope变量传递给ng-click函数
- 使 ng-click 函数通用以添加行
- 不能在 ng-click 函数中使用 .then()
- 无法将button的HTML传递给Angular的ng-click函数
- Angularjs通过ng-click函数访问这个元素
- 通过ng-click函数调用业务
- 当ng-click函数被触发时,修改$scope的值
- AngularJS的ng-click函数在我打开打印对话框后不工作
- 如何在指令中定义两个ng-click函数
- 如何在Angular中使用ng-click函数设置最后一行输入的焦点
- 没有到达AngularJS的ng-click函数
- 传递ng-model作为ng-click函数参数
- Angular:是一个可抓取的应用,没有href,只有ng-click函数
- Angularjs在ng-click函数中传递参数值
- 非控制器ng-click函数在指令中不起作用
- 用ng-click函数激活$interval