[英]JavaScript angular controller get value from scope from another controller
我有学校任务。 我们有这样的HTML代码:
<html ng-app="myTest">
<head><script type="text/javascript" src="../myScript.js"></script>
</head>
<body id="tst" class="textpage" ng-controller="TestController as testcon">
<form class="" id="frm" ng-submit="doStuff()">
<div class="form-group">
{{testinfo}}
</div>
<div class="form-group">
<button type="submit" id="sbtn" name="sbtn">testSubmit</button>
</div>
</form>
</body>
</html>
名称为myScript.js的javascript的内容是这样的:
var tester = angular.module('myTest', ['ui.mask']);
tester.controller('TestController', ['$scope', '$http', '$location', '$window', function ($scope, $http, $location, $window) {
$scope.doStuff = function () {
{
$scope.testinfo = 'unknown value';
};
};
}
]);
我可以选择添加新的JavaScript。 但是我不可能从$ scope.testninfo获得价值。 我无法编辑现有的JavaScript,也无法编辑HTML文件。 我可以添加新的JavaScript。
是否有选项如何在另一个JavaScript中从$ scope.testinfo获取价值?
谢谢。
您可以使用广播
从控制器1我们广播了一个事件
$scope.$broadcast('myEvent',anyData);
控制器2将收到我们的事件
$scope.$on('myEvent', function(event,anyData) {
//code for controller 2
});
这里anyData代表您要传递的对象
使用ng-model。
<div class="form-group">
<input type="text" ng-model="testinfo">
</div>
我认为不附加现有的javascript / html就不可能。 因为不能从另一个控制器(文件)访问TestController的$ scope。
如果您可以附加HTML,则可以使用$ rootscope,这样可以从另一个控制器访问由TestController设置的值。 或者,您可以添加全局应用程序值。 我创建了一个小提琴,其中显示了两个选项: https : //jsfiddle.net/Appiez/wnyb9pxc/2/
var tester = angular.module('myTest', []);
tester.value('globalVar', { value: '' });
tester.controller('TestController', ['$rootScope', '$scope', '$http', '$location', '$window', 'globalVar', function ($rootScope, $scope, $http, $location, $window, globalVar) {
$scope.doStuff = function () {
{
$rootScope.testinfo = 'this is the new value';
globalVar.value = 'a global value';
};
};
}
]);
tester.controller('TestController2', ['$rootScope', '$scope', 'globalVar', function ($rootScope, $scope, globalVar) {
$scope.doStuff2 = function () {
{
alert($rootScope.testinfo);
alert(globalVar.value);
};
};
}
]);
这就是角度服务的目的。 他们跨控制器传送数据。 您可以使用NG的$ broadcast发布包含数据的事件,但是可以通过提供程序,服务和工厂来解决此问题。
angular.module('krs', [])
.controller('OneCtrl', function($scope, data){
$scope.theData = data.getData();
})
.controller('TwoCtrl', function($scope, data){
$scope.theData = data.getData();
})
.service('data', function(){
return {
getData: function(){
return ["Foo", "Bar"];
}
}
});
这是一个小玩意儿,可帮助您进入事物的秋千。 祝学校好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.