$(document).ready和$ scope。$ on的组合('$ viewContentLoaded',function(){...})

时间:2014-03-31 02:24:03

标签: javascript jquery html angularjs jquery-ui

我在JQuery UI view / AngularJS个应用中使用JQuery个组件。

我的JavaScript代码中需要这样的东西(不起作用):

$(document).ready(function () {

    var elem = $('div[ng-view]')[0];
    var $scope = angular.element(elem).scope();

    $scope.$on('$viewContentLoaded', function() {

          // multiple JQuery statements
          // to support JQuery-UI componenets

    });
});  

此代码作为<script>包含在具有<div class="container" ng-view>元素的 index.html 中。

我的想法是我们需要一个两步的过程:

  • 首先JQuery对文档就绪的HTML事件做出反应,并使用$viewContenLoaded元素检索的$scope将侦听器附加到Angular的[ng-view]

  • 然后,每次加载视图时,我的JQuery代码都会被执行,JQuery UI组件会被激活并连线。

显然我的逻辑在某处有缺陷。请指出我正确的方向。

附加信息发布于2014年3月31日):

我的其余代码(控制器,服务,路由)都是用TypeScript编写的。

1 个答案:

答案 0 :(得分:1)

需要编译该元素以便将角度范围绑定到该元素。你可以尝试类似的东西:

var scope = angular.injector(['ng']).get('$rootScope').$new();
var compile = angular.injector(['ng']).get('$compile');
compile(elem)(scope);
scope.$on('$viewContentLoaded', function(){

// Your code

});

虽然我建议把你的代码放在一个指令中。上面显示的代码只不过是一种破解和危险,因为现在您可以全局访问您的服务。