如何将表单提交事件传播到自定义指令的父级?
如何将表单提交事件传播到自定义指令的父级?
我有一个简单的AngularJS项目,用户输入数据后,我会根据这些数据生成一个图表。我正在尝试找出如何组织代码,使其符合MVC设计模式。特别是,我在弄清楚如何将表单的提交事件传播到自定义指令的父级时遇到了问题。我正在寻找某种回调机制。
看起来有几种选择,但我还没有让它们中的任何一种工作。我考虑使用自定义指令、ui-Router和服务(如AngularJS:如何在控制器之间传递变量?)。
到目前为止,我一直在尝试使自定义指令的方法起作用。我有一个自定义指令
我认为NavigationController应该知道如何从InputController中提取输入数据并将其传递给OutputController。而InputController和OutputController应该保持不可知,以便可以重用它们。
我猜我已经弄清楚了除了流程控制以外的一切。输入表单包含
inputForm.js
(function(){
var app = angular.module('input-form', [ ]);
app.directive('inputForm', function(){
return {
restrict: 'E',
templateUrl: 'input-form.html',
};
});
app.controller('InputController', ['$window', '$log', function($window, $log, appData){
// ...
}]);
})();
index-chart.html
indexChart.js
(function(){
var app = angular.module('index-chart', [ ]);
app.directive('indexChart', function(){
return {
restrict: 'E',
templateUrl: 'index-chart.html'
};
});
app.controller('OutputController', ['$window', '$log', function($window, $log, appData){
this.renderChart = function(){
// This is where the chart should get rendered
};
}]);
})();
问题的出现原因:
在这段代码中,有一个父级指令(NavigationController)和两个子级指令(inputForm和indexChart)。父级指令将一个值传递给这两个子级指令,并且当输入表单提交时,子级指令将这个值赋给自己的$scope.data属性。问题是,当这个值在子级指令中改变时,父级指令并不会感知到这个改变。
解决方法:
为了解决这个问题,可以使用$watch方法在子级指令中监听$scope.data的改变,并在发生改变时执行相应的操作。在这个例子中,子级指令indexChart使用了$watch方法来监听$scope.data的改变,并将新值打印到控制台上。
另一个需要注意的点是,每个指令都有一个隔离作用域,并且都有一个名为data的属性。父级指令NavigationController将同一个值传递给这两个子级指令。这样,当子级指令的$scope.data属性改变时,父级指令也能感知到这个改变。
通过在子级指令中监听父级指令传递的值的改变,并在发生改变时执行相应的操作,可以将表单提交事件传播到父级指令。这样,父级指令就能感知到子级指令的变化,并做出相应的反应。