मैं निम्नलिखित निर्देश है:
!(function (window, angular) {
'use strict';
/**
* @ngdoc directive
* @name app.directive:social
* @description
* # social
*/
angular.module('app')
.directive('social', function(social_network_conf) {
return {
restrict: 'A',
scope: {
social: "@"
},
require: 'ngModel',
controller: function($scope, $element){
//for tests only
$scope.render = function(){
//how to I get the ngModel here
ngModel.$render();
};
$scope.setViewValue = function(val){
ngModel.$setViewValue(val);
};
},
link: function(scope, element, attr, ngModel) {
ngModel.$formatters.push(function(value) {// from model to view
value = value.trim();
if(value){
if (value.indexOf(social_network_conf.matcher) === 0){
var split_link = value.split(social_network_conf.divider);
return split_link[split_link.length-1];
}
else{
return value;
}
}
});
ngModel.$parsers.push(function(value) { // from view to model
value = value.trim();
if(value){
if (value.indexOf(social_network_conf.matcher) === 0){
return value;
}
else{
return social_network_conf.prefix + scope.social +
social_network_conf.suffix + value;
}
}
});
}
};
});
}(window, window.angular));
परीक्षण निम्नलिखित के रूप में चला जाता है:
'use strict';
describe('Directive: social', function() {
// load the directive's module
beforeEach(module('app'));
var element,
social_network_conf,
linker,
scope,
$httpBackend;
beforeEach(inject(function ($rootScope, _$httpBackend_, _social_network_conf_) {
scope = $rootScope.$new();
social_network_conf = _social_network_conf_;
//Must be an object to make use of prototypical inheritence for out-side-of-isolate-scope access
scope.models = {};
$httpBackend = _$httpBackend_;
$httpBackend.whenGET(/views\/social.html/).respond('<div></div>');
$httpBackend.whenGET(/views\/navigation.html/).respond('<div></div>');
}));
it('It should convert ngModel into full HTTP address notation', inject(function ($compile) {
element = angular.element('<input social="test_network" ng-model="models.test_network"></social>');
linker = $compile(element);
element = linker(scope);
scope.$apply(function(){
element.val('test');
});
scope.$digest();
expect(scope.models.test_network).toBe(social_network_conf.prefix + 'test' +
social_network_conf.suffix);
// expect(element.text()).toBe('this is the social directive');
}));
});
समस्या यह है कि उन पंक्तियों:
scope.$apply(function(){
element.val('test');
});
वास्तव में परिभाषित $ पार्सर का आह्वान न करें।
ngModel.$render
या ngModel.$setViewValue
पर कॉल करने के लिए एक एपीआई के साथ निर्देश के लिए नियंत्रक बनाने के बावजूद, लेकिन मेरे पास निर्देशक नियंत्रक पर nugModel को बदसूरत हैक के बिना पहुंचने का कोई तरीका नहीं है।
मैं काम करने के लिए .val() .trigger() प्राप्त करने में सक्षम था। बहुत बहुत धन्यवाद – welbornio
.val ("जो भी")। ट्रिगर ("इनपुट") भी मेरे लिए काम करता है! –
.trigger मेरे लिए उपलब्ध नहीं था। मैंने .val ("जो भी") का उपयोग किया। इसके बजाय ट्रिगर हैडलर ("इनपुट") –