繁体   English   中英

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.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM