gpt4 book ai didi

javascript - 在 AngularJS 中呈现 View 时会触发哪个事件?

转载 作者:行者123 更新时间:2023-11-29 19:43:42 25 4
gpt4 key购买 nike

我知道有 $viewContentLoaded,但它会在 AngularJS 用范围变量替换占位符之前触发。

我设法通过在我的 $viewContentLoaded 监听器中设置 0 毫秒的超时来解决这个问题,但这非常难看。

我正在使用它来解析部分中包含的 LessCSS 样式表,但我有一个 URL 前缀字段,我需要在将其传递给 LESS 之前将其替换为样式表 URL。

这是我的代码(用我丑陋的技巧):

var AccountController = function($scope, UserService) {
var user = UserService.get();
$scope.username = user.profile.displayName || user.contact;

var bindLESSInit = function($scope, linkElementSelector) {
$scope.$on('$viewContentLoaded', function() {
var linkElement = document.querySelector(linkElementSelector);
if (!linkElement) throw new Error('bindLESSInit: link element not found');

console.log('link href before timeout: ', linkElement.href);
// BAD: outputs "http://localhost:8282/%5B%5BstaticURLPrefix%5D%5D/static/portal/app/less/account.less"
setTimeout(function() {
console.log('link href after timeout: ', linkElement.href);
// GOOD: outputs "http://localhost:8282/static/portal/app/less/account.less"
// clear previous view's styles
less.sheets = less.sheets.filter(function(e) {
return e.getAttribute('class') && e.getAttribute('class').match('view-style');
});
less.sheets.push(linkElement);
less.refresh();
}, 0);

});
};

bindLESSInit($scope, '#account-stylesheet');
};

[...]

这里有一个相关问题:How can I trigger an event when an angular JS route template has been loaded

我尝试了这个答案,使用 $routeChangeSuccess 代替,但它给出了相同的结果。

干杯

最佳答案

这是一个很长的线程,但它可能对您有所帮助。快速阅读后,我认为这不是一种 Angular 做事方式。相反,建议使用 directive 来解决问题。

https://github.com/angular/angular.js/issues/734

关于javascript - 在 AngularJS 中呈现 View 时会触发哪个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21462475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com