2015-07-03 49 views
1

我是新手,我使用服務從json文件中獲取數據,然後將數據返回給控制器。當我點擊按鈕時,控制器方法沒有得到執行,console.log中也沒有錯誤。我在這裏錯過了什麼?使用工廠將數據返回給控制器時出錯

我的服務代碼:

Service.js

app.factory('MovieService', function ($http) { 
      var url = "js/data.json"; 
      var data; 

      return { 
       getData: function() { 
        return $http.get(url) 
         .success(function(response) { 
          data = response; 
          return data; 

         }) 
         .error(function (error){ 
          console.log("error"); 
         }) 
       } 
      }; 
     }); 

Controller.js

app.controller('MainController1', ['$scope', '$log','$location','MovieService', function($scope,$log,$location,MovieService) { 

    console.log("click"); 
    var getData = function() { 
      // This service's function returns a promise 
      MovieService.getData() 
       .then(function(data) { 
        // promise fulfilled 
        console.log("controller data"); 

        $scope.custdata = data; 
        console.log($scope.custdata); 

       }, function(error) { 
        // promise rejected, could log the error with: 
        console.log("error"); 
       }); 
     };  


}]) 

的index.html

<div class="main" ng-controller="MainController1 as main"> 

     <input type="button" name="getdata" value ="Get data" ng-click="main.getData()"></input> 

    </div> 

數據

[ 
    { 
     "Id": "1", 
     "Name": "Harry Potter" 
    }, 
    { 
     "Id": "2", 
     "Name": "Jurassic Park" 
    } 
] 
+1

控制方法應該是有界的,以'this'像'this.getData' –

回答

1

很少有事情要通知: -

1)你應該使用VAR的這功能綁定到控制器controller as語法: -

這一點。的getData =函數(){//你的邏輯}

2)你是第一個在success()error()兩次包裹承諾然後在另一個then()函數,而不是像這樣做: -

在服務: -

getData: function() { 
        return $http.get(url); 

       } 

在控制器: -

MovieService.getData() 
       .then(function(response) { 
        // promise fulfilled 
        console.log("controller data"); 

        $scope.custdata = response.data; 
        console.log($scope.custdata); 

       }, function(error) { 
        // promise rejected, could log the error with: 
        console.log("error"); 
       }); 

3)<input>不應該像</input>那樣關閉它沒有關閉標籤。

希望它能幫助:)

PLUNKER

+0

在運行plunker我得到的錯誤:HTTP://運行.plnkr.co/4diel6ZZjOWxbThp/data.json –

+0

plunker正確運行,爲什麼你在最後 – squiroid

+0

添加data.json Link是: - http://plnkr.co/edit/CH1rK2DSMa9SZfJwhcLe?p=preview – squiroid

2

你需要控制器功能的範圍進行綁定。

$scope.getData = function() { }" 

代替

var getData = function() { } 

和您正在使用controller as alias語法調用它的模板像

ng-click="getData()" 
2

在這種情況下,您需要從視圖中訪問的控制器功能應分配給this

所以,定義功能的this屬性,而不是作爲一個獨立的功能 - 就像這樣:

this.getData = function() {...} 

您正在使用var getData這將使函數中的局部功能,而不是揭露它。

相關問題