2

都市と郵便番号を入力するための単純な angularjs ディレクティブを作成しました。同じコントローラー内で2回使用すると、入力フィールドの値が重複することを除いて、正常に機能します! 範囲の問題だと思いますが、解決方法がわかりませんか?

FDVilleModule = angular.module('FDVille', []).
  directive('fdVille', () ->
    return {
      restrict: 'E'
      require: 'ngModel'

      template: """                                                                                                                                                                                                                                                             
        <div class=\"row-fluid\">                                                                                                                                                                                                                                               
          <div class=\"span4\">                                                                                                                                                                                                                                                 
            <input                                                                                                                                                                                                                                                              
              ng-model=\"cp\"                                                                                                                                                                                                                                                   
              ng-change=\"edit()\"                                                                                                                                                                                                                                              
              maxlength=\"5\"                                                                                                                                                                                                                                                   
              type=\"text\"                                                                                                                                                                                                                                                     
              class=\"input-block-level\"                                                                                                                                                                                                                                       
              placeholder=\"Code Postal\" />                                                                                                                                                                                                                                    
          </div>                                                                                                                                                                                                                                                                
          <div class=\"span8\">                                                                                                                                                                                                                                                 
            <select ng-model=\"selected_ville\"                                                                                                                                                                                                                                 
              ng-options=\"v.id as v.nom for v in villes\"                                                                                                                                                                                                                      
              class=\"input-block-level\">                                                                                                                                                                                                                                      
            </select>                                                                                                                                                                                                                                                           
          </div>                                                                                                                                                                                                                                                                
        </div>"""

      link: (scope, elem, attr, ctrl) ->
        scope.$watch('selected_ville', (value)->
          ctrl.$setViewValue(value))

      controller: ($scope) ->
        download_villes = (cp) -> $.getJSON('/ws/villes/cp', {cp:cp}, set_data)
        download_villesid = (id) -> $.getJSON('/ws/villes/id', {id:id}, set_init_data)

        set_data = (results) ->
          $scope.villes = results
          $scope.selected_ville = results[0].id if results.length
          $scope.$apply()

        saved_cp = ""
        $scope.edit = () ->
          if isNaN($scope.cp)
            $scope.cp = saved_cp
          else
            saved_cp = $scope.cp
            if saved_cp.length == 5
              download_villes(saved_cp)
            else
              $scope.selected_ville = null
              $scope.villes = []
    }
  )
4

2 に答える 2

0

実際、私はドキュメントで答えを見つけました:

スコープ-次のように設定されている場合:

true-この場合、このディレクティブに対して新しいスコープが作成されます。同じ要素の複数のディレクティブが新しい​​スコープを要求する場合、1つの新しいスコープのみが作成されます。テンプレートのルートは常に新しいスコープを取得するため、新しいスコープルールはテンプレートのルートには適用されません。

于 2013-02-25T12:15:01.740 に答える
0

他の例では、試すことができます

replace: true

注: ルート要素が 1 つ必要です。

知らなかった私たち読者のためのドキュメントへのリンクは次のとおりです。

http://docs.angularjs.org/guide/directive

于 2013-04-28T20:00:43.747 に答える