JavaScript 角度控制器从另一个控制器的作用域中获取值
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的javascript的内容.js是这样的:
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是不可能的。因为无法从另一个控制器(文件)访问测试控制器的$scope。
如果您可以附加 HTML,则可以使用该$rootscope,这样,测试控制器设置的值可以从另一个控制器访问。或者,可以添加全局应用值。我创建了一个小提琴,它显示了两个选项: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"];
}
}
});
这里有一个小提琴,可以帮助你进入事情的摇摆。祝你在学校好运!
相关文章:
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 从指令链接函数监视控制器作用域
- 控制器作用域变量在刷新之前未加载
- AngularJS:如何在指令范围的对象发生变化时更新与控制器作用域相关联的控制器作用域
- ng-click 指令不调用控制器作用域中定义的函数
- 如何从2级指令访问控制器作用域
- 角度指令控制器作用域继承
- 触发指令AngularJs的控制器作用域
- Angularjs-在路由更改时刷新控制器作用域
- 访问父指令's子指令中的控制器作用域变量
- 将Angular Service对象绑定到控制器作用域并更新
- UI引导日期选择器不调用内联控制器作用域上的函数
- 将变量从控制器作用域传递到指令
- 工厂中与控制器作用域绑定的已修改数据不会更新
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 如何在angular 1.4.5+中操纵指令中的控制器作用域
- AngularJS:在两个具有隔离作用域的指令之间共享一个控制器作用域
- 如何将控制器作用域变量传递给angular.元素在头部元素中追加子元素时
- AngularJS+Jasmine -在指令中写入一个控制器作用域
- 如何从嵌入式D3脚本中访问Angular控制器作用域