2016-07-13 2 views
-1

у меня есть проблемы с доступом директивы от другого и коды нижеКак получить доступ к директиве от других в angularjs?

app.module('myApp', []) 
.directive('vikiQues', ['$http', '$compile', function($http, $compile){ 
return { 
    restrict : 'E', 
    scope : true, 
    controller : [ 
     function(){ 
     } 
    ], 
    link : function(scope, iElement, iAttrs){ 
     $http.get('getOutside/1') 
      .then(function(data){ 
       iElement.html($compile($(data.data))(scope)); 
       /*scope.addThere.find('div.please-wait').remove(); 
       scope.questionList.push({ 
        text : '', 
        options : [] 
       });*/ 
      }); 
    } 
}; 
}]).directive('vikiOption', ['$http', '$compile', function ($http, $compile) { 
return { 
    restrict: 'E', 
    scope : true, 
    require : '^vikiQues', 
    link: function (scope, iElement, iAttrs, vikiQuesCtrl) { 
     $http.get('getInside/1') 
      .then(function(data){ 
       var _ = $(data.data); 
       scope._opt = false; 
       iElement.html($compile(_)(scope)); 
       if (scope.$parent.questionList[scope.$parent.totalQuestionCount-1].options.length > 2) 
        _opt = true; 
       scope.now = { 
        id : scope.$parent.questionList[scope.$parent.totalQuestionCount-1].options.length, 
        char : '', 
        text : '', 
        image : '', 
        removeable : scope._opt, 
       }; 
       ques.now.options.push(scope.now); 
      }); 
    } 
}; 

}]);

я получил эту ошибку каждый раз: angular.min.js: 117 Ошибка: [$ компиляции: ctreq] http://errors.angularjs.org/1.5.7/ $ компилировать/ctreq p0 = vikiQues & p1 = vikiOption

, что случилось там?

HTML код:
0" >
viki-ques и viki-option - это шаблоны, которые исходят от php. if i remove iElement.html ($ compile ($ (data.data)) (scope)); код, я не могу получить ошибку. Я думаю, что у меня есть ошибка. Эта ошибка возникает при компиляции ithink $ или области.(Помощь)

+0

Post вашего HTML. – dfsq

+0

я получаю шаблон вопроса из PHP и установить HTML для Viki-Ques элемент и получить из вариантов снова PHP и установить HTML для Viki-вариант ... является его достаточно? – maviofis

+1

Недостаточно информации, чтобы помочь. Создайте демо с проблемой, тогда легко понять проблему. – dfsq

ответ

0

Вы можете попробовать

require : 'vikiQues', 

или Вы должны изменить

controller : [ 
     function(){ 
     } 
    ], 

к:

controller : function(){}, 
+0

спасибо, но получил ту же ошибку – maviofis

+0

попробуй второй – daymosik

+0

спасибо, но не работаем. пожалуйста, помогите – maviofis

0

согласно directives documentation (SERACH для Создание директив, которые обмениваются данными) вам нужно потребовать директиву родителей li ка это:

.directive('vikiOption', function(){ 
    return { 
     restrict : 'E', 
     require: '^vikiQues', 
     template: '<li>my items</li>', 
     //templateUrl: 'url to html file with html from previous line', 
     scope : true, 
     link : function (scope, elem, attrs, ctrl){ console.log(ctrl); } 
    }; 
}); 

характер ^ означает угловым попытается найти требуемую директиву выше в иерархии разметки

, и вы должны иметь контроллер в вашей vikiQues директиве, объявить его как это

.directive('vikiQues', function(){ 
    return { 
     restrict : 'E', 
     transclude: true, //attention here!! 
     scope : true, 
     template: '<ul ng-transclude>item x</ul>', //and here, now you can instert vikiOption inside 
     controller : function(){ //pay attention no brackets 
     this.myProp = 'foo'; 
     } 
    }; 
}); 

и ваша разметка не используются:

<viki-queues> 
    <viki-option>can use ng-repet for viki-option<viki-option/> 
    <viki-option>to display a list of them<viki-option/> 
</viki-queues> 

P.S. templateUrl более удобно, так как вы можете сохранить вашу разметку в отдельном файле или получить его из шаблона двигателя, как asp.net или другого или просто сервер их в качестве общих статических HTML файлы

P.P.S надеется, что это помогает

+0

Итак, вы просто повторили то, что OP уже имеет: и '^ vikiQues', и контроллер есть. – dfsq

+0

Я никогда не видел объявления контроллера в массиве, так что это не то же самое – Denis

+0

Я видел это объявление везде, поэтому я его использую, но не – maviofis

Смежные вопросы