मैं एक निर्देश बनाना चाहता हूं जिसमें गतिशील नियंत्रक के साथ गतिशील दृश्य हो। नियंत्रक और टेम्पलेट दृश्य सर्वर से आ रहा है।गतिशील नियंत्रक और टेम्पलेट के साथ AngularJs निर्देश
निर्देशक
var DirectivesModule = angular.module('BPM.Directives', []);
(function() {
'use strict';
angular
.module('BPM.Directives')
.directive('bpmCompletedTask', bpmCompletedTask);
bpmCompletedTask.$inject = ['$window'];
function bpmCompletedTask ($window) {
// Usage:
// <bpmCompletedTask></bpmCompletedTask>
// Creates:
//
var directive = {
link: link,
restrict: 'E',
scope: {
type: '=',
taskdata: '=',
controllername:'@'
},
template: '<div ng-include="getContentUrl()"></div>',
controller: '@',
name: 'controllername'
};
return directive;
function link(scope, element, attrs) {
scope.getContentUrl = function() {
return '/app/views/TasksViews/' + scope.type + '.html';
}
scope.getControllerName = function()
{
console.warn("Controller Name is " + scope.type);
return scope.type;
}
}
}
})();
यहाँ कैसे मैं निर्देश
<div ng-controller="WorkflowHistoryController as vm">
<h2>Workflow History</h2>
<h3>{{Id}}</h3>
<div ng-repeat="workflowStep in CompletedWorkflowSteps">
<bpm-completed-task controllername="workflowStep.WorkflowTaskType.DataMessageViewViewName" taskdata="workflowStep.WorkflowTaskOutcome.TaskOutcome" type="workflowStep.WorkflowTaskType.DataMessageViewViewName">
</bpm-completed-task>
</div>
</div>
समस्या अब जब निर्देश नियंत्रक नाम यह यह के रूप में शाब्दिक स्ट्रिंग नहीं हो जाता है का उपयोग करने के कोशिश कर रहा हूँ एक पैरामीटर के रूप में।
क्या यह करने योग्य है? यदि यह करने योग्य नहीं है, तो इसके नियंत्रकों के साथ गतिशील दृश्य बनाने का सर्वोत्तम समाधान क्या है और उन्हें गतिशील रूप से ng-repeat के अंदर प्रदर्शित करें?
धन्यवाद,
अपडेट 20 जनवरी मैं सिर्फ मामले में मेरी कोड अद्यतन कुछ भी इसे करने में रुचि रखते हैं। सभी क्रेडिट @Meligy के लिए चला जाता है।
सबसे पहले निर्देशक:
(function() {
'use strict';
angular
.module('BPM.Directives')
.directive('bpmCompletedTask', bpmCompletedTask);
bpmCompletedTask.$inject = ['$compile', '$parse'];
function bpmCompletedTask ($compile, $parse) {
var directive = {
link: function (scope, elem, attrs) {
console.warn('in the first directive - before if');
if (!elem.attr('bpm-completed-task-inner'))
{
console.warn('in the first directive');
var name = $parse(elem.attr('controllername'))(scope);
console.warn('Controller Name : ' + name);
elem = elem.removeAttr('bpm-completed-task');
elem.attr('controllernameinner', name);
elem.attr('bpm-completed-task-inner', '');
$compile(elem)(scope);
}
},
restrict: 'A',
};
return directive;
}
})();
दूसरा निर्देशक
angular
.module('BPM.Directives')
.directive('bpmCompletedTaskInner',['$compile', '$parse',
function ($window, $compile, $parse) {
console.warn('in the second directive');
return {
link: function (scope, elem, attrs) {
console.warn('in the second directive');
scope.getContentUrl = function() {
return '/app/views/TasksViews/' + scope.type + '.html';
}
},
restrict: 'A',
scope: {
type: '=',
taskdata: '=',
controllernameinner: '@'
},
template: '<div ng-include="getContentUrl()"></div>',
controller: '@',
name: 'controllernameinner'
};
}]);
एचटीएमएल
<div ng-repeat="workflowStep in CompletedWorkflowSteps">
<div bpm-completed-task controllername="workflowStep.WorkflowTaskType.DataMessageViewViewName" taskdata="workflowStep.WorkflowTaskOutcome.TaskOutcome"
type="workflowStep.WorkflowTaskType.DataMessageViewViewName">
</div>
</div>
आपके उत्तर मेलिगी के लिए धन्यवाद। मेरी समस्या तब शुरू होती है जब नियंत्रक का नाम ऑब्जेक्ट वैल्यू सादा पाठ नहीं होता है। उदाहरण में आपने साझा किया है कि नियंत्रकों के नाम सर्वर से आ रहे हैं और मैं उन्हें पैरामीटर के रूप में निर्देश में भेज रहा हूं। – Hammad
मुझे लगता है कि मुझे समस्या मिल सकती है। मेरे उत्तर – Meligy
में अद्यतन की जांच करें, फिर भी। देखें, निर्देश सही ढंग से मान प्राप्त करता है और "वर्कफ़्लोस्टेप। वर्कफ़्लो टास्कटाइप.डाटामेसेज व्यू व्यूनाम" नामक नियंत्रक की खोज शुरू करता है, हालांकि यह मेरे नियंत्रक नहीं है और उसे इस ऑब्जेक्ट के मान का मूल्यांकन करने के बाद नियंत्रक की खोज करने के लिए है। मैं निम्नलिखित 'कोशिश की <बीपीएम-पूरा कार्य controllername =" {{workflowStep.WorkflowTaskType.DataMessageViewViewName}} "taskdata =" workflowStep.WorkflowTaskOutcome.TaskOutcome "type =" workflowStep.WorkflowTaskType.DataMessageViewViewName "> बीपीएम अपूर्ण कार्य> ' और यह – Hammad