如何从angularjs中的另一个page2(service2.html)控制器(ctrl2)调用page1(servi
how to call function of page1(service1.html) controller( ctrl1 ) from another page2(service2.html) controller( ctrl2 ) in angularjs
我尝试调用page1(service1.html)控制器(ctrl1)的函数来自angularjs中的另一个page2(service2.html)控制器(ctrl2)。这两个页面都有父控制器(parentcrl)。任何人都可以给我解决这个问题的想法。。
示例代码:
app.controller("parentctrl", function($scope) {
$scope.$on('emitdata', function(event, data) {
$scope.$broadcast('broadcast-data', data);
});
});
Page 1 : service1.html
app.controller("ctrl1", function($scope) {
$scope.$on('broadcast-data', function(event, data) {
$scope.received = data;
})
});
Page 2 : service2.html
app.controller("ctrl2", function($scope) {
$scope.emit = function() {
$scope.$emit('emitdata', {'key': 'uu'});
};
});
代码的问题是,当您在路由service2
时,service1
的作用域将被破坏,反之亦然。所以你不能这样通过。
您可以使用存储消息的工厂,也可以将接收到的值发送并存储在$rootScope
的变量中。
使用$rootScope
或工厂,您可以在输入路线后将收到的值添加到$scope
变量中。
我认为工厂更好/更干净,但两者都可以。
请看下面的演示或这个jsfiddle。(它使用$rootScope
方法。)
angular.module('demoApp', ['ngRoute'])
.controller("parentctrl", function($rootScope, $scope) {
$scope.$on('emitdata', function(event, data) {
//$scope.$broadcast('broadcast-data', data);
$rootScope.received = data;
});
})
.controller("ctrl1", function($rootScope, $scope) {
$scope.received = $rootScope.received || 'nothing received';
/*scope.$on('broadcast-data', function(event, data) {
$scope.received = data;
console.log('received data', data)
});*/
})
.controller("ctrl2", function($scope) {
$scope.emit = function() {
$scope.$emit('emitdata', {'key': 'uu'});
};
})
.config(function($routeProvider, $locationProvider) {
$routeProvider
.when('/service1', {
templateUrl: 'service1.html',
controller: 'ctrl1'
})
.when('/service2', {
templateUrl: 'service2.html',
controller: 'ctrl2'
})
.otherwise({redirectTo:'/service1'});
// configure html5 to get links working on jsfiddle
//$locationProvider.html5Mode(true);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular-route.js"></script>
<div ng-app="demoApp" ng-controller="parentctrl">
<script type="text/ng-template" id="service1.html">
Service page 1
{{received}}
</script>
<script type="text/ng-template" id="service2.html">
Service page 2
<button ng-click="emit()">call service 1</button>
</script>
<div ng-view=""></div>
<a href="#/service1">service 1 page</a>
<a href="#/service2">service 2 page</a>
</div>
相关文章:
- 将值从html传递到AngularJS控制器
- $Scope变量在HTML中不更新,尽管在控制器中不断更新
- 在动态加载的html中使用角度控制器
- 如何在Thymelaf中将JSON值从控制器传递到HTML
- 允许在Angular控制器或视图中使用html标记
- 如何将数据从 HTML 表单提供给控制器
- 在 MVC 中将 HTML 表单数据从视图传递到控制器 ASP.NET
- 如何从弹簧控制器方法更新html img src
- 将数据从MVC控制器传递到Angular视图,而不在最终的html中显示数据值
- 有多少HTML应该在一个角度控制器中
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 如何从html输入类型=“”中只获得Angular控制器变量中的时间值;时间”;
- AngularJS使用MVC动态获取html,附加到主体,并绑定一个控制器
- Rails控制器操作可以同时处理html和javascript请求吗
- Angular html文件可以'找不到JS控制器[Node.JS/Angular]
- 部分html视图's控制器未使用KendoPanelBar内容URL在指令模板URL中工作
- 将全局变量从控制器调用到HTML视图AngularJS
- 如何在javascript中处理html数组元素,并使用ajax将它们传递给控制器
- 将数据从控制器调用到HTML视图AngularJS
- 无法使用 VM 绑定到范围.控制器/HTML 中的表示法