如何从网页的任何位置(控制器组件外部)调用控制器下定义的函数?
当我按下“获取”按钮时,它可以完美运行。但是我需要从div控制器外部调用它。html" target="_blank">逻辑是:默认情况下,我的div是隐藏的。在导航菜单中的某个位置,我按了一个按钮,它应该显示()我的div并执行“获取”功能。我该如何实现?
我的网页是:
<div ng-controller="MyController">
<input type="text" ng-model="data.firstname" required>
<input type='text' ng-model="data.lastname" required>
<form ng-submit="update()"><input type="submit" value="update"></form>
<form ng-submit="get()"><input type="submit" value="get"></form>
</div>
我的js:
function MyController($scope) {
// default data and structure
$scope.data = {
"firstname" : "Nicolas",
"lastname" : "Cage"
};
$scope.get = function() {
$.ajax({
url: "/php/get_data.php?",
type: "POST",
timeout: 10000, // 10 seconds for getting result, otherwise error.
error:function() { alert("Temporary error. Please try again...");},
complete: function(){ $.unblockUI();},
beforeSend: function(){ $.blockUI()},
success: function(data){
json_answer = eval('(' + data + ')');
if (json_answer){
$scope.$apply(function () {
$scope.data = json_answer;
});
}
}
});
};
$scope.update = function() {
$.ajax({
url: "/php/update_data.php?",
type: "POST",
data: $scope.data,
timeout: 10000, // 10 seconds for getting result, otherwise error.
error:function() { alert("Temporary error. Please try again...");},
complete: function(){ $.unblockUI();},
beforeSend: function(){ $.blockUI()},
success: function(data){ }
});
};
}
这是从外部调用控制器功能的一种方法:
angular.element(document.getElementById('yourControllerElementID')).scope().get();
get()
您的控制器的功能在哪里。
你可以切换
document.getElementById('yourControllerElementID')`
至
$('#yourControllerElementID')
如果您使用的是jQuery。
另外,如果您的函数意味着要更改View上的任何内容,则应调用
angular.element(document.getElementById('yourControllerElementID')).scope().$apply();
应用更改。
还有一点,您应该注意的是,作用域是在页面加载后初始化的,因此,应始终在作用域外加载页面后才从作用域外部调用方法。否则,您将根本无法解决问题。
更新:
使用最新版本的angular,您应该使用
angular.element(document.getElementById('yourControllerElementID')).injector().get('$rootScope')
是的,实际上,这是 一个不好的做法 ,但是有时候您只需要快速而又肮脏地完成工作即可。
问题内容: 我有上面的控制器,它设置了一个我只能从内部访问值的控制器。 但我看到的地方,使用下面我将能够访问,但是当我在它不存在。 我无法弄清楚如何访问$ scope并使用变量更新它。 问题答案: 没有看到标记,我想MenuSideController的作用域是您选择的作用域的子作用域。 虽然可以像这样遍历树(假设我们想要的作用域是第一个孩子): 仅选择连接了特定控制器的元素会更简单。 假设您正在
假设我有一个名为的扩展,my_extension一个名为的插件。 然后,我的控制器中有一个名为的函数。 如何通过通常的http GET请求从外部调用此?
问题内容: 我正在使用socket.io在我的应用中启用聊天功能,并且正在使用一项服务来执行所有套接字操作。当出现消息时,我想从服务中触发控制器的功能以在UI中进行一些更改。所以我想知道如何从服务访问控制器的功能。样例代码: 这是服务的示例代码。 现在控制器的代码 问题答案: 您可以通过使用角度事件或来实现此目的。 在您的情况下会有所帮助,您需要广播事件,以便具有相同事件名称的所有子作用域都可以监
问题内容: 我单击时有一个下面的按钮,显示一个小的弹出窗口,如通知 我的意图是每隔几秒钟显示一次此弹出窗口,而不用单击按钮,而是从AngularJS控制器显示。 尝试以下解决方案 还包括脚本 使用这样的指令 我看到一个错误“对象没有方法弹出窗口” 问题答案: 伪指令用于DOM操作: 和指令
问题内容: 如何从视图调用Codeigniter控制器功能?当我在控制器中调用该函数时,获得404页面。 问题答案: Codeigniter是一个MVC(模型-视图-控制器)框架。从视图中调用函数确实不是一个好主意。该视图应仅用于演示,并且在进入控制器和模型中的视图之前,应先进行所有逻辑处理。 这很简单,但是确实提供了一个很好的方法。 我希望这有帮助!
问题内容: 我正在尝试使用AngularJS 的 ng-click 功能来切换视图。我将如何使用下面的代码来做到这一点? index.html controller.js 问题答案: 为了在不同的视图之间切换,您可以直接在index.html文件中更改window.location(使用$ location服务!)。 Controller.js 并配置路由器以根据位置切换到不同的部分(如此处所示h