仅将AngularJS用于路由目的

Got*_*dia 2 javascript jquery angularjs

我刚刚被分配了一个完全用jQuery制作的网站.它异步加载几页,并希望成为SPA.

现在唯一的事情是开发人员一般不考虑URL,人们无法通过www.example.com以任何其他方式访问网站

我知道AngularJS,我的问题是: - 是否值得集成AngularJS来管理路由,这样我就不必通过jQuery并检查每一次点击,然后每个链接?

谢谢

ahm*_*och 9

当然,您可以使用AngularJs进行路由.

在angular和jquery停止协同工作的地方,你不能对在angular指令中生成的视图使用jquery选择,因为jquery不选择运行时生成的视图.

要监视angularjs到完成DOM操作的时间,在angular的控制器中使用它来调用jqueryStartWork方法,这应该启动jquery的工作.

function stuffController($scope) {
$scope.$on('$viewContentLoaded', jqueryStartWork);
}
Run Code Online (Sandbox Code Playgroud)

对于某些angularjs指令渲染监视器,您可以使用一个指令,该指令将在角度完成该指令的dom操作时触发事件.例如,要监视ng-repeat,要渲染完成,请添加此指令

var app = angular.module('myapp', [])
.directive('onFinishRender', function ($timeout) {
return {
    restrict: 'A',
    link: function (scope, element, attr) {
        if (scope.$last === true) {
            $timeout(function () {
                scope.$emit('ngRepeatFinished');
            });
        }
    }
}
});
Run Code Online (Sandbox Code Playgroud)

然后在控制器中添加一个新函数,这个函数将在ng-repeat完成时调用,就像这样.

$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
    //you also get the actual event object
    //do stuff, execute functions -- whatever...
    alert("ng-repeat finished");
});
Run Code Online (Sandbox Code Playgroud)

但是别忘了将这个指令添加到你的ng-repeat标签中,就像这样

<tr data-ng-repeat="product in products" on-finish-render>
Run Code Online (Sandbox Code Playgroud)

[编辑] 今天我一直在尝试在md-tab的div中运行一个简单的D3 svg追加脚本.在控制器完成(md-tab也已完成)渲染所有内容后,我遇到了绘制它的问题.我提出,如果你使用$ timeout (在windows.setTimeout上的包装器),它将向浏览器的事件队列添加一个新事件.它将在当前队列(呈现)之后和您按顺序添加的新超时事件函数之前运行.它也适用于0ms.

 $timeout(drawTree, 0); //drawTree is a function to get #tree div in a md-tab and append a D3 svg
Run Code Online (Sandbox Code Playgroud)