通过 AJAX 加载 AngularJS 控制器后,它无法正常工作。

3

如何实例化控制器以便其方法可以正常工作?

我正在通过 AJAX 加载一个 SettingsController,但加载后,它的方法无法调用。

我需要做什么来实例化这段代码?

我查看了 $compile,但似乎不起作用。

使用 Twitter Bootstrap 加载部分的标准方法

$("#modal").modal({remote: 'partials/users/settings.html'})

加载的部分:
%div{'ng-controller' => 'SettingsController'}
   = form_tag '', 'ng-submit' => 'update_settings($event)', :method => :post do |f|

在我的SettingsController中:
$scope.update_settings = ($event) ->
  alert 'hey'

没有任何作用。


2
你对Angular提出了最奇怪的问题,哈哈。出于好奇,你为什么要尝试这个? - Ben Lesh
2
哈哈,抱歉,我想我又编写了一些愚蠢的代码。这是一个设置模态框,但当我加载它时,它不起作用。 - Trip
2
+1 为“自己编程愚蠢”的经验教训。下次我处于同样的状态时会牢记这个。 - Beetroot-Beetroot
尝试发布您的AJAX代码。答案很可能就在其中。 - Beetroot-Beetroot
1
这样更有意义...你让它听起来像是在尝试下载一串JavaScript并将其注册为控制器...这在配置阶段之外几乎不可能。 - Ben Lesh
显示剩余2条评论
1个回答

5

好的,看起来问题在于您想动态加载一些HTML到一个模态窗口中。我不确定您使用的是什么模态插件,但您需要做以下操作:

<div id="myModal" ng-include="source"></div>

其中source是$scope上的一个属性:

$scope.source = 'test.html';

您可以在指令中监听事件$includeContentLoaded,并调用您的模态框函数:
scope.$on('$includeContentLoaded', function () {
    $('#myModal').modal();
});

让Angular处理您想要包含的部分的拉下,然后使用模态框打开它。

虽然看起来这并不可重用。您如何实现动态加载内容到单个div中,以代表所有模态框呢? - Trip
1
另一个不需要包含jQuery的本地AngularJS替代方案是使用来自http://angular-ui.github.com/bootstrap/的$dialog服务。 - pkozlowski.opensource
@Trip:为了动态加载内容,您需要更改传递到ng-include的值。我稍微更新了我的答案,请看一下。 - Ben Lesh
有很多种方法可以解决这个问题,但关键是你应该让ng-include来处理部分加载。 - Ben Lesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接