0

我是Angular的新手,對Promise有點困惑。我創建了一個自定義指令,它應該顯示來自遠程Web服務的信息。

這裏是負責數據檢索工廠:

myAppModule.factory('Data', function ($http) 
{ 
    var PID = 7499; 
    return $http({method: "GET", url: "http://localhost:7001/Nama/services/helloworld/bookingInit", params: {pid: PID}}); 
}); 

這是應該顯示的信息,從該服務傳來的指令:

myAppModule.directive("timePeriods", function() 
{ 
    return { 
     restrict: 'E', 
     templateUrl: 'timePeriods.html', 
     controllerAs: 'periodsCtrl', 
     controller: ['Data', function (Data) 
     { 
      Data.success(function (res) 
            { 
             this.periods = res.appointments; 
            }); 
     }] 
    } 
}); 

終於在這裏是爲指令的模板:

<table class="table table-bordered" ng-class="'noselect'"> 
    <td colspan="2"> 
    <h4>TIMESLOTS</h4> 
    </td> 
    <tr ng-repeat="period in periodsCtrl.periods"> 
    <td> 
     <div>{{period.start | date : 'hh:mm'}} - {{period.end | date : 'hh:mm'}}</div> 
    </td> 
    </tr> 
</table> 

所以我希望從服務的信息是dis玩過一張桌子,但是當頁面呈現時這張桌子是空的..

+1

this.periods = res.appointments; 你的情況中的「this」被引用到$ http.success函數的作用域,而不是你的指令作用域。 您應該爲您的控制器注入$ scope並設置爲 $ scope.periods = res.appointments。 – OctoD 2014-09-23 09:06:23

+0

@OctoD,似乎並沒有幫助:我把它改爲: 控制器: '$範圍',函數($範圍) \t \t { \t \t \t $ scope.periods = ... }] – andreybavt 2014-09-23 10:16:14

回答

0

您需要使用scope。$ apply才能使更改生效。 AngularJS and scope.$apply

+0

不,解決的承諾已經安排了摘要。 – 2014-09-23 19:13:28