2016-05-19 8 views
0

私のディレクティブには、ディレクティブに配列を渡すための属性id-modelがあります。ディレクティブコントローラは、その配列を引数として使用して関数を実行する必要があります。私は私のコントローラの属性にアクセスし、配列を記録することができますが、私の関数は決して実行されません。

属性を使用せずに変更した場合placesFact.getDetails(idModel)placesFact.getDetails($scope.model)すべて正常に機能しますが、このディレクティブには柔軟性が求められます。

*更新: placesFact.getDetails()法上明確にするために、それは場所IDを持つGoogleの場所情報を検索し、約束通りの結果を返します。それはテストされ、正常に動作します。

指令

.directive('gPlaces', function() { 
    return { 
    restrict: 'E', 
    scope: '@', 
    link: function(scope, element, attrs) { 
     scope.tempUrl = attrs.tempUrl; 
    }, 
    controller: function($scope, $attrs, placesFact) { 
     var idModel = $attrs.idModel; 

     $attrs.$observe('idModel', function(value) { 
     idModel = value; 
     console.log(idModel); // This logs the array 
     placesFact.getDetails(idModel).then(function(results) { 
      console.log(results); // This logs nothing 
      $scope.places = results; 
     }); 
     }); 
    }, 
    template: '<div ng-include="tempUrl"></div>' 
    } 
}) 

コントローラ

angular.module('myApp').controller('PlacesCtrl', function($scope) { 

    $scope.model = [ 
     'ChIJR4dOl_hYwokRApSCaQiBidk', 
     'ChIJv-Ghof5YwokRMtWLEV12hJI', 
     'ChIJjyX2GqRZwokRT-gdcGoPuSI', 
     'ChIJqSurReFYwokRec7JFACToas', 
     'ChIJn8dCo-NYwokRC_4nRUQWbNE', 
     'ChIJszmN0-JYwokRk-XCDbO6X_Y', 
     'ChIJt4TrE_1YwokRVedrKxaqYoo', 
     'ChIJiW0WvwJZwokRIWyzCvo3o5k', 
     'ChIJsS1xLQJZwokRGfXJPMwXA1A', 
     'ChIJI5xCX6NZwokR3jdSQwsw2DI', 
     'ChIJuVE5aLtZwokR-K75OxUEtzI', 
     'ChIJ7R4tgLtZwokRM8thlhlzE2o', 
     'ChIJxbWTG_pYwokRPgtFVKi-Cuc', 
     'ChIJKZVnwFVYwokRgDw_sxw3NCo', 
     'ChIJw_JUgvhYwokR91EMxVDhB8M', 
     'ChIJZ3oXOVZYwokRNnAXaDRKAzg', 
     'ChIJP9idxlZYwokRLH-I1mNfzYQ', 
     'ChIJndGJ5FNYwokRricJvhT0t1s', 
     'ChIJhZ0Sn1ZYwokRRA1MZJZHrHA', 
     'ChIJhTdv51NYwokR7V105uVzf8g', 
     'ChIJvfVwDFJYwokRtWobbwOMEVM', 
     'ChIJpY9Tg01YwokRCr_aQpDrqgk', 
     'ChIJ-fRuLFdYwokR0KKQ6Av_WhQ', 
     'ChIJh-DIsE1YwokRhuFrdM1ge5E' 
    ];  
}); 

ビューのコメントで述べたようestus

<g-places temp-url="pages/places/multiTemp.html" id-model={{model}}></g-places> 
+0

コントローラが動作しているときに属性が補間されていないので、 'var idModel = $ attrs.idModel'に頼らないでください。それが動作し、$ attrs。$ observeがそうでない場合、何か間違っている、あなたが 'placesFact.getDetails'がどのように動作するかを知っている人以外は誰もいません。 Btw、 'scope: '@''構文も間違っています。 – estus

+0

'getDetails'の実装は何ですか?もし '$ resource'であれば、' placesFact.getDetails'を使う必要があります。$ promise.then(function(results){' – Kamil

+0

@estus @Kami私は' placesFact.getDetails'を明確にするために質問を編集しました。スコープ: '@'構文は、私が読んでいたものから、それが適切であると思ったものから何をすべきなのですか? –

答えて

0

、私のscope: '@'構文が間違っていて、問題の根本原因でした。これは私の最初の指示です。少しの試行錯誤や多くの読書が私に何をすべきかを理解させてくれます。

ディレクティブが動作しているように見えます。

.directive('gPlaces', function() { 
    return { 
    restrict: 'E', 
    scope: { 
     idModel: '=', 
     tempUrl: '@' 
    }, 
    controller: function($scope, placesFact) { 

     placesFact.getDetails($scope.idModel).then(function(results) { 
     $scope.places = results; 
     }); 
    }, 
    template: '<div ng-include="tempUrl"></div>' 
    } 
}) 
関連する問題