I am working on a project where I would like to encapsulate a directive library and distribute it to other developers to use.  I would like to keep the changes to the model within this encapsulated code, so I don't really want the dev's changing the scope variables outside of the lib.In my code, I have 2 different approaches to communicating with my lib from the parent controller.The first theory is to create a lib that contains a directive and a service.  The parent controller would call the service, which would handle all of the changes to the lib model and the directive would react depending on these changes.The second theory is to put all the functions to change the model in the directive itself and call the directive scope on the parent to make the changes.Here is a plunker that shows what I'm asking in better detail.  It's a simple example, but illustrates the 2 different methods. http://plnkr.co/edit/CR350Vx7NiHs5tkjNWZL?p=previewI'm leaning towards the second method as it just seems cleaner to implement from a development scenario.Any advice from the Angular experts out there?Plunker Html:<body ng-app=myApp>    This is Example 1 - Using a service to modify directive    <div ng-controller=Example1Ctrl>        <example1-directive ng-model='example1Model'></example1-directive>        <br>        <br>        <input type=button value=Change Example 1 ng-click='changeExample1()' />    </div>    <br>    <br>    This is Example 2 - Modifying directive in the scope of the directive    <div ng-controller=Example2Ctrl>        <example2-directive ng-model='example2Model'></example2-directive>        <br>        <br>        <input type=button value=Change Example 2 ng-click='changeExample2()' />    </div></body>Plunker jsvar app = angular.module(myApp, []);//-------------------------------------------------- //-------- This is example 1//-------------------------------------------------- app.controller(Example1Ctrl, function($scope, example1Svc) {  $scope.example1Model = {    value: Example 1 - Original Value  }  $scope.changeExample1 = function() {    example1Svc.change($scope.example1Model, Example 1 - Changed Value);  }});/// This part would be encapsulated in a lib app.directive(example1Directive, function() {  return {    restrict: E,    scope: {      model: =ngModel    },    template: {{model.value}}  }});app.service(example1Svc, function() {  this.change = function(example1Model, newValue) {    example1Model.value = newValue;  }})// End lib//-------------------------------------------------- //-------- This is example 2//-------------------------------------------------- app.controller(Example2Ctrl, function($scope, example1Svc) {  $scope.example2Model = {    value: Example 2 - Original Value  }  $scope.changeExample2 = function() {    $scope.example2Model.change(Example 2 - Changed Value);  }});/// This part would be encapsulated in a lib app.directive(example2Directive, function() {  return {    restrict: E,    scope: {      model: =ngModel    },    template: {{model.value}},    controller: function ($scope) {      $scope.model.change = function(newValue) {        $scope.model.value = newValue;      }    }  }});// end lib
Is one of these the more Angular way of communicating with a directive?
design;angularjs;implementations