Last Updated: January 20, 2020
·
1.056K
· gerardsans

Angular - Directives: handling scope

AngularJs Meetup South London Collection | this article

When creating your directive you need to decide how are you going to handle scope. There are two options: isolated from the outside world, linked to the parent scope.

Isolated scope

Creates new scope but you CAN'T access $scope.$parent. This is the only option blocking access to the parent scope. All the other options below allow it. Even scope: false

scope: {} 

Basic link (via $scope.$parent)

Creates new scope but you CAN access parent scope using $scope.$parent. This is the default option when no scope option is used and apparently is equal to scope: false.

scope: true 

//Usage: 
//  var setting = $scope.$parent.setting;

Using DOM element attributes

One-way linked variable

<profile id="1"></profile>

scope : { local_id: "@id" } //using alias
scope : { id: "@" } //abbreviation when using identical names

//Usage: 
//  var profile_id = local_id;
//  var profile_id = id;

Two-way linked variable

<profile data="user"></profile>

scope : { local_data: "=data" } //using alias
scope : { data: "=" } //abbreviation when using identical names

//Usage: 
//  local_data = 1;
//  data = 1;

Calling an external function

<profile onAlert="alert(message)"></profile>

scope : { local_onAlert: "&onAlert" } //using alias
scope : { onAlert: "&" } //abbreviation when using identical names

//Usage: 
//  local_onAlert({message:"hey"});
//  onAlert({message:"hey"});

AngularJs Meetup South London Collection | this article

Have a fresh tip? Share with Coderwall community!

Post
Post a tip
Did you know?

Angular apps often share the page with analytics and payment scripts that are not Angular modules. Those scripts execute on the same origin as the framework.

Security insights from Cside