Javascript 仅在页面刷新时填充数据
我正在尝试使用Javascript 仅在页面刷新时填充数据,javascript,angularjs,Javascript,Angularjs,我正在尝试使用$broadcast和$on将数据从控制器传递到指令 数据仅在刷新页面时显示在指令的HTML模板上。当I使用嵌入指令将路由到控制器模板时,它不会出现 奇怪的是,数据似乎是在我登录控制台时收到的。我尝试过使用$timeout和angular.element(document).ready 控制器: $http.getDashboardData(...).success(function(res) { populateResults(res); ... }
$broadcast
和$on
将数据从控制器传递到指令
数据仅在刷新页面时显示在指令的HTML模板上。当I使用嵌入指令将
路由到控制器模板时,它不会出现
奇怪的是,数据似乎是在我登录控制台时收到的。我尝试过使用$timeout
和angular.element(document).ready
控制器:
$http.getDashboardData(...).success(function(res) {
populateResults(res);
...
}
function populateResults (data) {
$rootScope.safeApply(function () {
$rootScope.$broadcast('show-results', data);
});
}
指令:
.directive('results',['$rootScope', function ($rootScope) {
return {
restrict: 'AE',
scope: {},
transclude: true,
templateUrl: '/html/directives/results.html',
link: function(scope, elem, attr){
...
$rootScope.$on('show-results', function(event, args) {
angular.element(document).ready(function () {
scope.init(args);
});
});
scope.init = function (args) {
console.log('ARGS', args); //Has data
scope.questions = args;
};
带有嵌入式结果指令的控制器页面:
<div class="myPage">
<results></results>
</div>
.run:如果用户刷新页面,则加载配置文件:
$rootScope.loadProfile = function () {
return Me.getProfile({user_id : Cookies.get('user_id')}).success(function (res) {
$rootScope.me = res;
}).error(function (err) {
console.log('Error: ', err);
});
};
在指令链接函数中,尝试使用scope.$on而不是$rootScope.$on,并直接使用scope.init而不使用文档。就绪在指令链接函数中,尝试使用scope.$on而不是$rootScope.$on,并在不使用文档的情况下直接使用scope.init。就绪请记住在模板消化之前控制器会运行。听起来这件事可能在指令被消化之前就发生了。使用服务共享数据或通过attributetrue将数据传递给指令作用域可能更好,但如果我没记错的话,$broadcast应该在下一个摘要周期中运行,我也很好奇“路由到控制器”的顺序这件事呢occurence@charlietfl我将发布路由应用程序流比路由配置更重要。请记住,在模板消化之前,控制器会运行。听起来这件事可能在指令被消化之前就发生了。使用服务共享数据或通过attributetrue将数据传递给指令作用域可能更好,但如果我没记错的话,$broadcast应该在下一个摘要周期中运行,我也很好奇“路由到控制器”的顺序这件事呢occurence@charlietfl我将发布路由应用程序流比路由配置本身更重要如果我使用scope
而不是$rootScope
,$on
不接收广播,这很可能意味着它是在显示指令之前广播的。检查您的事件流。如果我使用scope
而不是$rootScope
,$on
不接收广播,这很可能意味着它是在显示指令之前广播的。检查您的事件流。
.config:
...
state('dashboard', {
url : '/dashboard',
templateUrl: '/html/pages/dashboard.html',
controller: 'dashboardCtrl',
resolve : {
ProfileLoaded : function ($rootScope) {
return $rootScope.loadProfile();
}
}
});
$rootScope.loadProfile = function () {
return Me.getProfile({user_id : Cookies.get('user_id')}).success(function (res) {
$rootScope.me = res;
}).error(function (err) {
console.log('Error: ', err);
});
};