イベントにサブスクリプションするときに属性名として渡すことができるディレクティブを作成しようとしています。 $ scope。$ onを使用しています。基本的に、一連のイベントこれです:。
- オブジェクトは、例えば、他のコントローラでは、「validationResultMessage」と呼ばれる$ rootScopeを使用して放送$放送されています。
- 私は、 "subscriptionResultMessage"という文字列を渡す "subscription"という属性を持つディレクティブを持っています。
- このディレクティブは、 "サブスクリプション"属性の値をスコープに渡し、 "$ scope。$ on"でサブスクリプションを行います。
問題は、すべてが評価された時点で属性の値が "未定義"であるように見えるため、$ scope。$ onを使用して購読しようとすると、実際には "undefined "ではなく "
" validationResultMessageここに私のディレクティブです:
私は、このように使用app.directive('detailPane', function() {
return {
restrict: 'E',
scope: {
selectedItem: '=',
subscription: '@',
},
templateUrl: 'app/templates/DetailPane.html', //I'm also worried that this is causing my controller to get instantiated twice
controller: 'DetailPaneController'
};
});
:
<td class="sidebar" ng-controller="DetailPaneController" ng-style="{ 'display': sidebarDisplay }">
<detail-pane
selected-item='validationResult'
subscription='validationResultMessage'/>
</td>
そして、私はにこの属性を渡すようにしようとしているコントローラ:
app.controller('DetailPaneController', ['$scope', '$http', 'dataService', 'toastr', '$uibModal', '$rootScope', '$attrs', function ($scope, $http, dataService, toastr, $uibModal, $rootScope, $attrs) {
$scope.fetching = [];
$scope.validationResult = null;
$scope.sidebarDisplay = 'block';
console.log('subscription is ', $scope.subscription);
var thisSubscription = $scope.subscription;
//if I hardcode the param as 'validationResultMessage', this works
$scope.$on($scope.subscription, function (event, arg) {
$scope.validationResult = arg;
});
}]);
これは本当に私が後にしている行動を提供しています。私が正しく理解している場合、親DetailPaneControllerのスコープのvalidationResultをSecondControllerによってブロードキャストされているものに設定しています。私は次に、私が補間インラインをしたくない場合、どのようにしたいかについての情報を表示するために、validationResult1とvalidationResult2を参照するテンプレートを使用することができると仮定します。 この動作を達成するためにリンク関数を使用していますが、これは前に考えたことではありません。このソリューションの基本的な仕組みを正しく理解していますか? – istrupin
はい、 '$ root'に' $ broadcast'を送り、購読しているリスナーにイベントを渡させます。この要件では、ディレクティブでこれを行い、各detailsPaneはそれが購読しているものだけを聞くべきです。再利用可能で独立している必要があります。 'selected-item'はメッセージが受信されたときに更新される必要のある' model'です。おそらく宣言されたコントローラ/ビューにバインドされます。 'link'はこの種のDOM操作や、指示ロジックが必要なときには強力です。私は 'validationresult1'と2を使って設定を模倣し、詳細を渡すことができることを示しました。それは必須ではありません。@ istrupin – Searching