在使用$ http数据加载作用域后,Angularjs运行指令

时间:2014-08-15 10:06:25

标签: jquery html angularjs emit

在http调用将

  • 元素加载到DOM之后,我需要运行一个运行jPager jquery插件的指令。

    jquery工作正常,但我无法在渲染屏幕后运行指令(它只是在之前运行,因此范围是空的)

    我尝试过使用$ emit和$ broadcast demo,但仍然无法启动它。

    范围将

  • 标记加载到itemContainer中,然后jQuery会对数据进行分页。

    <div wss-pager class="holder"></div>
            <ul id="itemContainer" ng-bind-html="ctData"></ul>
    
    ////
    
    function loadData() {
                    $http({
                            method: 'GET',
                            url: 'api/getMyData',
    
                        }).
                        success(function(data, status, headers, config) {
                            // deferred.resolve(data);
                            $scope.ctData = data.m_StringValue;
                        //    
                            $scope.$emit('UpdateJPages');
                        }).
                        error(function(data, status, headers, config) {
                            alert("error" + data);
                            $scope.ctData= "";
                        });
    
                };
    
    /////////
    
      angular.module('app').directive("wssPager", [function () {
                return {
                    restrict: "A",
                    link: function (scope, elem, attrs) {
                        scope.$on('UpdateJPages', function() {
    
                            $("div.holder").jPages({
                                containerID: "itemContainer",
                                perPage: 5,
                                startPage: 1,
                                startRange: 1,
                                midRange: 5,
                                endRange: 1
                            });
    
    
     });
    
  • 2 个答案:

    答案 0 :(得分:5)

    使用ng-if 如果在此调用之前cData为空,请使用如下:

    <div wss-pager class="holder" ng-if="ctData"></div>
    

    如果没有,你可以有一个额外的变量,例如loaded

    <div wss-pager class="holder" ng-if="loaded"></div>
    function loadData() {
        $scope.loaded = false;
        $http({
            method: 'GET',
            url: 'api/getMyData'
        })
        .success(function(data, status, headers, config) {
            // deferred.resolve(data);
            $scope.ctData = data.m_StringValue;
            $scope.loaded = true
            $scope.$emit('UpdateJPages');
        })
        .error(function(data, status, headers, config) {
            alert('error' + data);
            $scope.ctData= '';
        });
    };
    

    答案 1 :(得分:1)

    好的,我找到了感兴趣的人的工作。可能不是最好的答案,但它解决了这个问题。

    我使用了$ timeout函数来启用屏幕渲染。

     $timeout(function () {
           $scope.$emit('UpdateJPages');
             });