2015-06-27 53 views
2

在我的directive中,我將根據index值替換模板。當用戶點擊模板時,我需要將點擊的directive值分配給scope值。如何使用自定義元素點擊事件更新範圍值?

我無法直接撥打scope這裏的replaced元素。如何處理這種情況?

這裏是我的directive代碼:

var allAppsGallery = function ($compile) { 

    return { 

     replace : true, 

     scope : { 
      index : "=", 
      app : '=' 
     }, 

     link : function (scope, element, attrs) { 

      var getTemplate = function (index, app) { 

       switch (index) { 

        case 0 : 
        case 13 : 
        case 14 : 
        case 15 : 
        case 5 : 

         return $('<div />', 
            { 
             class:'bgr box'+index, 
             html : '<h2>'+app.completion+'%</h2><span>'+app.name+'</span>', 
             click : function() { 
              alert("hi"); //click works here 
         //but how to update the scope variable? 
             } 
            } 
           ); 

         break; 


       } 

      } 


      element.html(getTemplate(scope.index, scope.app)); 
      $compile(element.contents())(scope); 
      element.replaceWith(element.contents()); 

      element.click(function(event) { //click event not works. 

       scope.activeApp = scope.app; //the new value on click need to update 
       scope.$appy(); 

      }); 



     } 

    } 

} 

這裏有一個現場演示:

LIVE DEMO FOR TEST

+0

'$ scope.activeApp =應用;'其實我想更新'app'這裏。範圍變量名稱是'$ scope.activeApp' – user2024080

回答

1

更好的辦法是結合ng-click編譯元素之前:

case 5: 
    return '<div class="bgr" ng-class="\'box\' + index" ng-click="action()">' + 
       '<h2>{{app.completion}}</h2><span>{{app.name}}</span>' 
      '</div>'; 

...

scope.action = function() { 
    scope.activeApp = scope.app; 
}; 

Updated demo

+0

更新如您所說,但'ng-click'不起作用。 – user2024080

+0

我已更新現場演示。你可以請看看嗎? – user2024080

+0

@ user2024080查看更新後的答案並修復演示:http://plnkr.co/edit/M9UTmVt6qWW9mBPA5qiR?p=preview – karaxuna

相關問題