2016-05-19 31 views
0

我的指令有一個屬性id-model,用於將數組傳遞給指令。指令控制器應該使用該數組作爲參數執行一個函數。我可以訪問我的控制器中的屬性並記錄數組,但我的功能從不運行,我不知道爲什麼。

如果我不使用該屬性,並將placesFact.getDetails(idModel)更改爲placesFact.getDetails($scope.model)一切正常,但我希望有更多的指令靈活性。

*更新: 要澄清的placesFact.getDetails()方法,它看起來了一個地方的ID谷歌地方信息並返回結果爲一個承諾。它已經過測試並且工作正常。

指令

.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' 
    ];  
}); 

查看

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

您不應該依賴'var idModel = $ attrs.idModel',因爲該屬性在控制器運行時不插值。如果它有效並且$ attrs。$ observe沒有,那麼你做錯了什麼,除了你知道'placesFact.getDetails'是如何工作的。順便說一下,'scope:'@''語法也是錯誤的。 – estus

+0

'getDetails'的實現是什麼?如果它是'$ resource',你需要使用'placesFact.getDetails(idModel)。$ promise.then(function(results){' – Kamil

+0

@estus @Kami我編輯了這個問題以澄清'placesFact.getDetails'這個是我第一次嘗試一個指令,所以如果我關閉了某些東西,就可以原諒我。從我讀的內容看,'scope:'''語法應該是什麼,我認爲這是適當的 –

回答

0

正如在評論中提到estus,我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>' 
    } 
}) 
相關問題