2014-12-15 28 views
5

Görüntüyü ng-controller öğesinin dışında düzenlemeye çalışıyorum. Ben $rootScope ve dom manipulations kullanarak çözmek mümkün oldu, ama nasıl yerel angularjs tarafından çözülebilir bilmek ister misiniz?ng model dış denetleyici

Html:

<body> 
    <div class="container"> 
     <div class="block" ng-controller="BlockController as block"> 
      <div><strong>Name:</strong> {{ block.name }}</div> 
      <a href ng-click="block.edit()">Edit</a> 
     </div> 
    </div> 


    <div class="container-editor"> 
     <div id="block-editor"></div> 
    </div> 
    </body> 

Js:

burada
angular.module('app', []) 

    .controller('BlockController', BlockController); 

    function BlockController($compile, $scope) 
    { 
     this.name = 'default name'; 

     this.edit = function() { 
      var $editor_html = ' <input type="text" ng-model="block.name" name="name" /> <a href ng-click="block.save()">Save</a>'; 

      $editor_html = $compile($editor_html)($scope); 
      angular.element(document.querySelector("#block-editor")).html('').append($editor_html); 
     }; 

     this.save = function() { 
      // save block 
      angular.element(document.querySelector("#block-editor")).html(''); 
     }; 

    } 

plnkr

örnektir

+0

gibi birden direktifleri geçebilir denetleyici içinde düzenleme giriş etiketi tutarak bir problem var mı ? – aa333

+0

Angular uygulamanızda başka bir iç içe yerleştirilmiş birden fazla kapsam oluşturabileceğinizi biliyor muydunuz? Sonra her birine kendi kontrol ünitesini verin, böylece bu "Açısal Yolu" uygulayabilirsiniz. – Blazemonger

+0

Teşekkürler. @Blazemonger, birden fazla kapsam ile örnek gösterebilir misiniz? – Webeith

cevap

0

Daha açısal yolu? Sadece direktifleri kullanın. Temel olarak, bir çocuk yönergesinde bir ebeveyn yönergesinin denetleyicisini * alabilirsiniz. Ebeveyn denetçisine, alt öğeleri için bir alt öğe olarak davranın.

.directive('parent', function() { 
    return { 
    controller: function() { 
     this.catchChild = function(child) { 
      // code... 
     }; 
    } 
    }; 
}) 
.directive('child', function() { 
    return { 
    require: '^parent', 
    link: function($scope, $element, $attrs, parentController) { 
     $scope.jump = function() { 
     // I'm jumping... 
     parentController.catch($scope); 
     }; 
    } 
    }; 
}) 

senin için plnkr güncelleme: http://plnkr.co/edit/qRURHRMWt9K5acLWmCHv?p=preview

(*) Bir dizinin

angular.module('app', []) 
.directive('parent1', function() { 
    return { 
     controller: function() { 
      this.fn1 = function(child) { 
       // code... 
      }; 
     } 
    }; 
}) 
.directive('parent2', function() { 
    return { 
     controller: function() { 
      this.fn2 = function(child) { 
       // code... 
      }; 
     } 
    }; 
}) 
.directive('child', function() { 
    return { 
     require: ['^parent1', '^parent2'], 
     link: function($scope, $element, $attrs, controllers) { 
      var parent1Controller = controllers[0]; 
      var parent2Controller = controllers[1]; 
      parent1Controller.fn1(); 
      parent2Controller.fn2(); 
     } 
    }; 
})