2016-04-01 9 views
3

私はAngularJSを初めて使っています。anglejs関数from html戻り値

私はhtmlから関数を呼び出したいと思います。

<td> 
    {{getComponentSubtype(component.ID)}} 
</td> 

ただし、関数はwebapiを呼び出し、コールバックを待機します。どのようにデータをHTMLに表示するのですか?

+0

これは 'ng-repeat'の中で呼び出されていますか?あなたに確かな答えを与えるためにはもう少し情報が必要です。 – Lex

+0

はいこれは​​はng-repeatの中にあります – billboard

+0

その場合、S4beRが提案するものと同様の解決策が必要になります。 – Lex

答えて

4

HTMLから関数を呼び出し、コールバックを受け取ったらその値をHTMLで出力可能なJSONオブジェクトに格納します。

{{ getComponentSubtype(component.ID) }} 

<td ng-if="componentsSubType[component.ID] != null"> 
    {{ componentsSubType[component.ID] }} 
</td> 
<td ng-if="componentsSubType[component.ID] == null">Loading Component ...</td> 

コントローラー:

function getComponentSubtype(componentId) { 
    apiService.get('/api/components/' + componentId + '/componentSubtype', config, 
    function(result) { 
     if ($scope.componentsSubType == null) { 
      $scope.componentsSubType = {}; 
     } 

     $scope.componentsSubType[componentId] = result; 
    }, 
    function() { 
     if ($scope.componentsSubType == null) { 
      $scope.componentsSubType = {}; 
     } 

     $scope.componentsSubType[componentId] = "Load Failed"; 
    }); 
} 

注:私はHTMLにあなたがループからcomponentを取得していることを想定している一方、UI

HTMLでのロードメッセージを表示(ng-repeat

0

これは理想的ではない可能性がありますが、より良い解決方法を知る必要があります。

あなたのテンプレートにその種類やアクセスを格納するオブジェクトを使用することができます。各コンポーネントのidの

<td>{{ componentSubtypes[component.id] }}</td> 

コールgetComponentSubtype:あなたのHTML内

$scope.componentSubtypes = {}; 

components.forEach(function(component) { 
    getComponentSubtype(component.id); 
}); 

function getComponentSubtype(componentId) { 
    apiService.get('/api/components/' + componentId + '/componentSubtype', config, 
     getComponentSubtypeCompleted(componentId), 
     getComponentSubtypeFailed); 
} 

// Using a closure here for the id 
function getComponentSubtypeCompleted(id) { 
    return function(result) { 
     $scope.componentSubTypes[id] = result; 
     // ... 
    } 
} 
+0

​​はng-repeat内にありますが、あなたの提案では、getComponentSubtypeメソッドの呼び出し方法がわかりません – billboard

+0

それに応じて回答を編集しました – evsheino

1

...

<td>{{myvariable}}</td> 

(コントローラ内)...

angular.module('yourApp').controller('ControllerName', function($scope, apiService) { 
$scope.myvariable = 'please wait'; 
function initComponent(id) { 
    apiService.get('/api/components/' + id + '/componentSubtype').then(function(response) { 
     $scope.myvariable = response; 
    }).catch(function(failedResponse) { 
     // handle failure here 
     console.log('oops', failedResponse); 
    }); 
} 

initComponent(500); 

});