当然你可以使用 AngularJs 来做路由。
在 Angular 和 jquery 停止一起工作的地方,你不能在 angular 指令中生成的视图上使用 jquery 选择,因为 jquery 不会选择运行时生成的视图。
要监视 angularjs 何时完成 DOM 操作,请在您的 angular 控制器中使用它来调用 jqueryStartWork 方法,该方法应该启动 jquery 的工作。
function stuffController($scope) {
$scope.$on('$viewContentLoaded', jqueryStartWork);
}
对于某些 angularjs 指令渲染监视器,您可以有一个指令,当 angular 完成该指令的 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');
});
}
}
}
});
然后在控制器中添加一个新函数,该函数将在 ng-repeat 完成时调用,如下所示。
$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
//you also get the actual event object
//do stuff, execute functions -- whatever...
alert("ng-repeat finished");
});
但不要忘记将此指令添加到您的 ng-repeat 标记中,就像这样
<tr data-ng-repeat="product in products" on-finish-render>
[编辑]
今天我一直在尝试在 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