Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅在页面刷新时填充数据_Javascript_Angularjs - Fatal编程技术网

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);
        });
    };