Javascript Angularjs如何从另一个控制器调用控制器的函数
我正在尝试拆分一个大控制器。方法是通过工厂,但由于我正在更改DOM,所以应该通过控制器来完成 然后,我试图实现的是从Cntrl1调用Cntrl2中定义的函数。 榜样 html 演示 我希望将工厂的“var x”定义为Cntrl2的函数,然后在我从Cntrl1调用工厂时通过工厂执行此函数 那么,如何使这项工作?这种方法正确吗?或者我应该从工厂更改DOM吗 干杯,Javascript Angularjs如何从另一个控制器调用控制器的函数,javascript,angularjs,Javascript,Angularjs,我正在尝试拆分一个大控制器。方法是通过工厂,但由于我正在更改DOM,所以应该通过控制器来完成 然后,我试图实现的是从Cntrl1调用Cntrl2中定义的函数。 榜样 html 演示 我希望将工厂的“var x”定义为Cntrl2的函数,然后在我从Cntrl1调用工厂时通过工厂执行此函数 那么,如何使这项工作?这种方法正确吗?或者我应该从工厂更改DOM吗 干杯, Gerard不知道Cntrl2和Cntrl1的关系在哪里,我会使用类似的发射或广播。根据过去的经验,我认为在同一页面中使用两个或多个不同
Gerard不知道Cntrl2和Cntrl1的关系在哪里,我会使用类似的发射或广播。根据过去的经验,我认为在同一页面中使用两个或多个不同的模块不是一个好主意
var myModule = angular.module('app', []);
angular.module('app').controller('Cntrl1',
['$scope', '$q', '$timeout', 'myFactory',
function ($scope, $q, $timeout, myFactory) {
$scope.$emit('messageEvt','started');
myFactory.process().then(function() {
$scope.$emit('messageEvt','ended');
});
}]);
angular.module('app').controller('Cntrl2',
['$scope', '$q', '$timeout', $rootScope,
function ($scope, $q, $timeout, $rootScope) {
$rootScope.$on('messageEvt',function(e,msg) {
$scope.message = msg;
}
}]);
angular.module('app').factory('myFactory',
['$window', '$q','$timeout',
function($window, $q,$timeout) {
var x;
return {
process: function() {
var deferObj = $q.defer();
$timeout(function() {
deferObj.resolve(x);
});
return deferObj.promise;
},
};
}]);
我认为更好的方法是让工厂维护模型,两个控制器在需要时更新模型 我把小提琴改成
如果我理解错了,请告诉我。我认为你将工厂命名为“共享范围”。工厂不是范围。但是你是对的,与控制器通信的一个好方法是通过工厂。我已经意识到在工厂中生成html代码是可以的,只是代码应该插入到控制器的DOM中,而不是工厂中。如果这是正确的,那么我将使用一个控制器来操纵DOM和工厂来构造hmtl,然后应该添加hmtl(然后问题就无关紧要了)
var myModule = angular.module('app', []);
angular.module('app').controller('Cntrl1',
['$scope', '$q', '$timeout', 'Share_scope',
function ($scope, $q, $timeout, Share_scope) {
Share_scope.process();
$scope.message = 'started';
}]);
angular.module('app').controller('Cntrl2',
['$scope', '$q', '$timeout', 'Share_scope',
function ($scope, $q, $timeout, Share_scope) {
Share_scope.x = function() {
alert('done');
}
}]);
angular.module('app').factory('Share_scope',
['$window', '$q',
function($window, $q) {
var x;
return {
process: function() {
return x;
},
};
}]);
var myModule = angular.module('app', []);
angular.module('app').controller('Cntrl1',
['$scope', '$q', '$timeout', 'myFactory',
function ($scope, $q, $timeout, myFactory) {
$scope.$emit('messageEvt','started');
myFactory.process().then(function() {
$scope.$emit('messageEvt','ended');
});
}]);
angular.module('app').controller('Cntrl2',
['$scope', '$q', '$timeout', $rootScope,
function ($scope, $q, $timeout, $rootScope) {
$rootScope.$on('messageEvt',function(e,msg) {
$scope.message = msg;
}
}]);
angular.module('app').factory('myFactory',
['$window', '$q','$timeout',
function($window, $q,$timeout) {
var x;
return {
process: function() {
var deferObj = $q.defer();
$timeout(function() {
deferObj.resolve(x);
});
return deferObj.promise;
},
};
}]);
angular.module('app').factory('Share_scope',
['$window', '$q',
function($window, $q) {
var x;
return {
getProcess: function() {
return x;
},
setProcess: function(value){
x = value;
}
};
}]);