Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Directive that creates child scope in AngularJS

When creating complex forms I found the need of separating some parts of my view into different child scopes to be able to have individual visual properties.

The good example could be implementing 'click-to-edit' behaviour: when you have one html to view something and another to edit.

One of the solution is to create en directive that will have isolated scope. But in case if html markup for different properties differs a lot, you need to have kind of "double transclusion" (manually compile templates upon switching).

So more simplier is to have some small copy-pasting, but show dirrectly what is going on with view. This simplifies markup a lot.

Here is a sample code that illustrates that problem:

<span class="editable" >
  <span ng-hide="editing">
    {{user.first}} <span ng-click="editing = true"><i class="icon-pencil"></i></span>
  </span>
  <span ng-show="editing">
    <input type="text" ng-model="user.first"> 
    <span ng-click="editing = false"><i class="icon-ok"></i></span>
  </span>
</span>
<span class="editable" >
  <span ng-hide="editing">
    {{user.last}} <span ng-click="editing = true"><i class="icon-pencil"></i></span>
  </span>
  <span ng-show="editing">
    <input type="text" ng-model="user.last"> 
    <span ng-click="editing = false"><i class="icon-ok"></i></span>
  </span>
</span>

In this scenario 'child scopes' is first that come into mind.

But I didn't found directive that simply creates new scope in AngularJS. Is there a one?

like image 875
Valentyn Shybanov Avatar asked Jun 06 '13 10:06

Valentyn Shybanov


People also ask

What are the directive scopes in AngularJS?

The directive scope uses prefixes to achieve that. Using prefixes helps establish a two-way or one-way binding between parent and directive scopes, and also make calls to parent scope methods. To access any data in the parent scope requires passing the data at two places – the directive scope and the directive tag.

What is the scope of scope in AngularJS?

AngularJS Scope The scope is the binding part between the HTML (view) and the JavaScript (controller). The scope is an object with the available properties and methods. The scope is available for both the view and the controller.

How many child scopes can an AngularJS application have?

Scope Hierarchies Every angularJS application can have only one root scope as it is the parent scope. But it can have more than one child scope. New scopes can be created by directives which are added to parent scope as child scope.

What is $scope in angular?

$rootScope is a parent object of all “$scope” angular objects created in a webpage. $scope is a child object that is used to bind the HTML(view) & Javascript(Controller) in a webpage. It is created with the ng-app directive. It is created with the ng-controller directive.


1 Answers

As one of the very straight solution I've wrote an simple one-line directive:

.directive('childScope', function() {
  return { scope: true, restrict:'AE' }
});

And use it just adding to <span class="editable" child-scope> in my source example.

But may be there is some standard directive for doing that?

If not, I consider this solution could be usefull for others.

like image 65
Valentyn Shybanov Avatar answered Nov 28 '22 11:11

Valentyn Shybanov