如何从网页的任何地方(控制器组件之外)调用控制器下定义的功能?
当我按下"get"按钮时它完美地工作.但我需要从div控制器外部调用它.逻辑是:默认情况下我的div是隐藏的.在导航菜单的某处我按下一个按钮,它应该显示()我的div并执行"get"功能.我怎么能做到这一点?
我的网页是:
<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>
Run Code Online (Sandbox Code Playgroud)
我的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 …Run Code Online (Sandbox Code Playgroud) 我正在使用AngularJS来构建与传统Flex应用程序交互的HTML控件.Flex应用程序中的所有回调都必须附加到DOM窗口.
例如(在AS3中)
ExternalInterface.call("save", data);
Run Code Online (Sandbox Code Playgroud)
将会通知
window.save = function(data){
// want to update a service
// or dispatch an event here...
}
Run Code Online (Sandbox Code Playgroud)
在JS resize函数中,我想发送一个控制器可以听到的事件.似乎创建服务是最佳选择.你能从AngularJS外部更新服务吗?控制器可以监听服务中的事件吗?在一个实验(点击小提琴)我做了似乎我可以访问服务,但更新服务的数据不会反映在视图中(在示例中<option>应该添加到<select>).
谢谢!
我希望能够从Angular之外的函数更新Angular中的范围.
例如,如果我有一个返回成功回调的jQuery插件,我希望能够从该成功回调更新范围.我见过的每个解决方案都涉及调用angular.element(selector).scope然后调用$apply返回的作用域.但是,我也看到很多评论表明,当调试信息关闭时这不起作用,因此不推荐,但我还没有看到任何替代解决方案.
有没有人知道如何在不使用Angular之外更新范围angular.element(selector).scope?
以下是帖子中接受的解决方案:
" $scope.$apply()如果你想从AngularJs控件之外对范围值进行任何更改,就像jQuery/javascript事件处理程序一样,你需要使用它.
function change() {
alert("a");
var scope = angular.element($("#outer")).scope();
scope.$apply(function(){
scope.msg = 'Superhero';
});
}
Run Code Online (Sandbox Code Playgroud)
.scope()当帖子中的调试数据关闭时,这是一个不起作用的警告:
"根据使用的文档,FYI .scope()要求启用调试数据,但出于速度原因,不建议在生产中使用调试数据.下面的解决方案似乎围绕范围() - rtpHarry 2014年12月5日15:12"
我没有看到在这篇文章或其他类似帖子中使用.scope()的替代解决方案.
谢谢!
更新
一个不使用的可能解决方案angular.element(selector).scope是我FirstCtrl在窗口对象中使用的控制器中分配了范围.我注入$window到FirstCtrl控制器,并做了以下内容:
$window.FirstCtrlScope = $scope;
Run Code Online (Sandbox Code Playgroud)
然后从jQuery或其他JavaScript我可以做:
var scope=window.FirstCtrlScope;
scope.$apply(function () {
// update the scope
});
Run Code Online (Sandbox Code Playgroud)
这是一个很好的解决方案还是有更好的解决方案来更新范围而不使用angular.element(selector).scope?
谢谢!
所以我刚刚尝试将普通 JS 更改为角度,我想知道如何从另一个 .js 文件访问我的控制器范围。我环顾四周,尝试了几种方法,但没有成功。
我发现了类似的问题,如下所示
我不想对范围值进行任何更改,而只是使用范围内的函数。关于如何从另一个 .js 文件中的控制器范围调用该函数有什么想法吗?