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>
コントローラが動作しているときに属性が補間されていないので、 'var idModel = $ attrs.idModel'に頼らないでください。それが動作し、$ attrs。$ observeがそうでない場合、何か間違っている、あなたが 'placesFact.getDetails'がどのように動作するかを知っている人以外は誰もいません。 Btw、 'scope: '@''構文も間違っています。 – estus
'getDetails'の実装は何ですか?もし '$ resource'であれば、' placesFact.getDetails'を使う必要があります。$ promise.then(function(results){' – Kamil
@estus @Kami私は' placesFact.getDetails'を明確にするために質問を編集しました。スコープ: '@'構文は、私が読んでいたものから、それが適切であると思ったものから何をすべきなのですか? –