私は、このアプリケーションのcategoryIdによってサブカテゴリをもたらすこのディレクティブを持っています。このカテゴリはサービスと呼ばれ、サブカテゴリはあなただけのために知っています。指示文のAngularJSデフォルトの空のオプションを削除
OK ディレクティブサービス-detail.phpが含まれているファイルがあります。
<services-child serviceid="{{id}}"></services-child>
ディレクティブ:
'use strict';
app.directive('servicesChild', function ($window,$state,servChildService) {
return {
require: '^form',
restrict: 'EA',
scope: {
serviceid: '@',
},
templateUrl:'assets/views/partials/service-child.php',
link: function ($scope, $element, $attributes) {
var serviceId = $attributes.serviceid;
$scope.childs = servChildService;
servChildService.loadServiceChilds(serviceId);
$scope.serviceChilds = servChildService.serviceCH;
}
};
});
app.factory('serviceChildResource', ['$resource', function($resource) {
return $resource("/services/serviceChild/:id", {id: '@id'}, {
getChilds: {
method: 'GET'
}
});
}]);
app.service('servChildService', function(serviceChildResource) {
var self = {
'isLoading': false,
'showBlock': true,
'serviceCH': [],
'loadServiceChilds': function(serviceId){
if (!self.isLoading) {
self.isLoading = true;
var params = {
'id': serviceId,
};
self.serviceCH = [];
serviceChildResource.getChilds(params, function(data){
if(data.childs.length > 0){
angular.forEach(data.childs, function(value, key){
self.serviceCH.push(new serviceChildResource(value));
self.isLoading = false;
self.showBlock = true;
});
}else{
self.showBlock = false;
self.isLoading = false; //show the loading.
}
});
}
}
};
return self;
});
今のサービスと子のビューは、このサービス-child.phpは次のとおりです。
<div class="panel panel-white" ng-show="childs.showBlock">
<div class="panel-heading border-light">
<h4 class="panel-title"><span class="text-bold">Add More Services</span>
</h4>
</div>
<div class="table-responsive">
<table class="table table-bordered table-hover" id="sample-table-1">
<thead>
<tr>
<th>Service</th>
<th>Description</th>
<th>Price</th>
<th>Qty.</th>
<th>Select</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="service in serviceChilds">
<td>{{service.name}}</td>
<td ng-bind-html="service.description">
{{service.description}}
</td>
<td>${{service.price}}</td>
<td>
<qty-select ng-hide="{{service.single_service}}"
price="{{service.price}}"
id="{{service.id}}"
indexid = {{$index}}>
</qty-select>
</td>
<td><input type="checkbox" value="{{service.id}}"
ng-model="$root.servCheck[service.id]"
name="servCheckN"/></td>
</tr>
</tbody>
</table>
<div ng-show="childs.isLoading">
<span us-spinner="{radius:10, width:5, length:4, lines:8}"></span>
</div>
</div>
</div>
ここで、このディレクティブには、Dynaマイクドロップダウン: あなたが見るように、これはディレクティブです:
<qty-select ng-hide="{{service.single_service}}"
price="{{service.price}}"
id="{{service.id}}"
indexid = {{$index}}>
</qty-select>
今、このディレクティブのコードは、この数量-select.jsです:
'use strict';
app.directive('qtySelect', function ($window,$state,servChildService,$localStorage,$rootScope,$timeout) {
return {
require: '^form',
restrict: 'EA',
scope: {
indexid: '@',
},
templateUrl:'assets/views/partials/qty-select.php',
link: function ($scope, $element, $attributes) {
var i = 1;
while (i < 16) {
$scope.selectObj.push({'value' : $attributes.price * i,
'label' : i + ' (' + $attributes.price * i + ')',
'price' : $attributes.price * i,
'qty' : i,
});
i += 1;
};
console.log($rootScope.priceQty);
}
};
});
だから基本的に、このディレクティブが何をするかの選択オプション要素を作成しています しかし、それはインデックスExで乗算された価格を示しています。 1($ 10)は1つずつインクリメントされます。 Ex。 2($ 20)はその結果がこのようなものです:あなたが価格にディレクティブに10を渡した場合、それが表示されます属性:
<select ng-init="$parent.priceQty[indexid] = selectObj[0]"
ng-model="$parent.priceQty[indexid]" ng-change="updatePrice()"
ng-options="option.label for option in selectObj"
class="ng-valid ng-not-empty ng-dirty ng-valid-parse ng-touched" style="">
<option value="?"></option>
<option label="1 (15)" value="object:77">1 (15)</option>
<option label="2 (30)" value="object:78">2 (30)</option>
<option label="3 (45)" value="object:79">3 (45)</option>
<option label="4 (60)" value="object:80">4 (60)</option>
<option label="5 (75)" value="object:81">5 (75)</option>
<option label="6 (90)" value="object:82">6 (90)</option>
<option label="7 (105)" value="object:83">7 (105)</option>
<option label="8 (120)" value="object:84">8 (120)</option>
<option label="9 (135)" value="object:85">9 (135)</option>
</select>
今、このすべてが正常に動作しますが、私はの乗り心地を取得する方法がわかりません最初の空のオプションは、dropDownにアングルを付加します。あなたは私がNGリピートとし、NG-オプションをしようとしていますが、 私は両方の問題を抱えていますで見たよう
これは選択数量-select.php
<select ng-init="$root.priceQty[indexid] = selectObj[0]"
ng-model="$root.priceQty[indexid]" ng-change="updatePrice()"
ng-options="option.label for option in selectObj" >
</select>
<!-- <select ng-model="$root.priceQty[indexid]" ng-change="updatePrice(indexid)">
<option ng-repeat="value in selectObj" value="{{value.value}}"
ng-selected="$index == 1">{{value.label}}</option>
</select> -->
を見るディレクティブです。
私が$ scopeで作業すると、動作しますが、ルートを使用しようとしているときに動作しません。 これは動作しません。
私は、私の見解で、私は
<select ng-init="$root.priceQty[indexid] = selectObj[0]"
を設定しているが、人口ますHTMLで私は
<select ng-init="$parent.priceQty[indexid] = selectObj[0]"
$親理由を参照してください選択していることに気づきますか?それを変更しています。
これらの入力をrootScopeに設定する必要があります。フォームを送信する必要があり、ng-modelをrootScopeに送信するように設定していないと、これらの値にアクセスできません。
$scope.priceQty = $scope.selectObj[0];
、それが働いていたが、私は$ rooScopeを使用する場合、それはdoesnの:私はこれを追加select要素を構築した後
はまた、私は数量-select.jsディレクティブ
でこれを実行しようとしましたそれは未定義と言います。
$rootScope.priceQty = $scope.selectObj[0];
はありがとう
あなたがここに二つの別々の質問を持っているようです。 '$ rootScope'をこのように使用することは決してありません。それは、完全に使用可能な指示文を作成するという目的を破ります。代わりに、選択された項目の格納に使用するディレクティブの 'scope'プロパティにプロパティを追加します。ディレクティブを使用している要素が値を渡した場合は、そのディレクティブでデフォルトとして使用し、ディレクティブで必要に応じてプロパティを更新します。 – Claies
これを読むほど、それは意味がありません。再現可能なディレクティブの例を作成した場合は役立ちます。 – Claies