1

私は AngularJS を使用しており、このフィドルに似た新しい入力を動的に追加できるフォームを作成しようとしています: http://jsfiddle.net/V4BqE/ (以下のメイン HTML、フィドルでの作業コード)。

<div ng-app="myApp" ng-controller="MyCtrl">
  <div add-input>
    <button>add input</button>
  </div>
</div>

追加する入力の長さが 300 行以下であるため、フォームに HTML テンプレートを使用できるようにしたいと考えています。私の問題は、テンプレートで使用されたときにデータを含むスコープ変数にインデックスを付ける方法がわからないことです。plnkr http://plnkr.co/edit/4zeaFoDeX0sGTuBMCQP2?p=infoで上記のコードを独自に修正したバージョンを作成しようとしました。ただし、ボタンをクリックしてもフォーム要素は表示されません。

オンライン (plnkr) template.html で 404 not found が表示されますが、これは plnkr の制限に過ぎないと思います。Python HttpServer を使用しているマシンでは、メソッドを使用すると、 とError: [$parse:syntax]が取得されます。$templateRequestTypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.$http.get

インデックス付きのスコープ変数配列を外部の html ファイルで動作させるためのアドバイスはありますか?

ありがとう、JR

編集:plnkrリンクを更新

4

1 に答える 1

0

ディレクティブと外部テンプレートなしで実行できます

あなたがやろうとしていることは、ディレクティブを必要としません (実際には、基本的な angularjs ツールを使用すると非常に簡単です)

http://plnkr.co/edit/LVzGN8D2WSL2nR1W7vJB?p=preview

html

<body>

  <div class="container" ng-app="myApp" ng-controller="MyCtrl">

    <button class="btn btn-primary" type="button" ng-click="addPhoneInput()">add input</button>

    <form>
      <div ng-repeat="item in telephoneNumbers">
        <hr>
        <input type="text" ng-model="item.phone">
      </div>
    </form>
    
    
    <hr>
    
    <div class="well">
      <h4>Phone Numbers,</h4>
      <p ng-repeat="item in telephoneNumbers">{{item.phone}}</p>
    </div>
  </div>
</body>

js

var app = angular.module('myApp', []);

app.controller('MyCtrl', ['$scope', function($scope) {
  // Define $scope.telephone as an array
  $scope.telephoneNumbers = [];

  $scope.addPhoneInput = function() {
    $scope.telephoneNumbers.push({});
  };

  // This is just so you can see the array values changing and working! Check your console as you're typing in the inputs :)
  $scope.$watch('telephoneNumbers', function(value) {
    console.log(value);
  }, true);
}]);

どうしてもディレクティブを使用する場合は、

http://plnkr.co/edit/BGLqqTez2k9lUO0HZ5g1?p=preview

電話番号.template.html

<div>
  <hr>
  <input type="text" ng-model="ngModel" >
</div>

html

<body>

  <div class="container" ng-app="myApp" ng-controller="MyCtrl">

    <button class="btn btn-primary" type="button" ng-click="addPhoneInput()">add input</button>

    <form>
      <phone-number ng-repeat="item in telephoneNumbers" ng-model="item.phone"></phone-number>
    </form>
    
    
    <hr>
    
    <div class="well">
      <h4>Phone Numbers,</h4>
      <p ng-repeat="item in telephoneNumbers">{{item.phone}}</p>
    </div>
  </div>
</body>

js

var app = angular.module('myApp', []);

app.controller('MyCtrl', ['$scope', function($scope) {
  // Define $scope.telephone as an array
  $scope.telephoneNumbers = [];

  $scope.addPhoneInput = function() {
    $scope.telephoneNumbers.push({});
  };

  // This is just so you can see the array values changing and working! Check your console as you're typing in the inputs :)
  $scope.$watch('telephoneNumbers', function(value) {
    console.log(value);
  }, true);
}]);

app.directive('phoneNumber', function(){
  return {
    replace:true,
     scope: {
      ngModel: '=',
    },
    templateUrl: "phone-number.template.html"
  }
});
于 2015-06-05T12:42:25.610 に答える