AngularJS ngInclude directive and scope inheritance

ngInclude directive and scope

There are many times when you want to include a html snippet code from another file but preserve the scope of it. It is usually when you have different form fields for the various objects and you want to have a global controller that oversees the updating of different forms. So if you want to take the quickest route and use ngInclude directive you would be surprised that it is not properly linking to your controller and you cannot access the form instance.

This is due to ngInclude internals and how they work. ngInclude creates for each use as a new child scope so overwriting anything inside the new included HTML file content will be written into child scope and not in the one you’ve anticipated to be. So there are few workaround around this as creating a new object inside the scope for example

$scope.data = {}

inside the controlling controller and then in the imported html file set values inside the

<input type="text" ng-model="data.name"/>

This works if you don’t have a problem with static value being inserted into all html files, but if you want maximum flexibility then this is not the perfect solution. So after inspecting the source code inside ngInclude.js, I have seen a room for improvement and created a similar directive to ngInclude called ngInsert, which instead of making new child scope it inherits the current scope and continue using it inside. You can pick up the whole source code at this gist. You can use it in the same manner as existing ngInclude. Continue reading “AngularJS ngInclude directive and scope inheritance”

Extending Javascript objects with a help of AngularJS extend method

Multiple ways of extending javascript objects

/**
 * One-way reference from subclass to superclass (instance)
 * Most of the time this is what you want. It should be done
 * before adding other methods to Subclass.
 */
ChildClass.prototype = new SuperClass();
 
/**
 * Two-way reference
 * Superclass will also get any Subclass methods added later.
 */
ChildClass.prototype = SuperClass.prototype;
 
/**
 * Cloning behavior
 * This does not setup a reference, so instanceof will not work.
 */
angular.extend(ChildClass.prototype, SuperClass.prototype);
 
/**
 * Enhancing a single instance
 * This could be used to implement the decorator pattern.
 */
angular.extend(subClassInstance, SuperClass.prototype);

Be that likable person

Become genuinely interested in other people.

Smile.

Remember that a person’s name is to that person the sweetest and most important sound in any language.

Be a good listener. Encourage others to talk about themselves.

Talk in terms of the other person’s interests.

Make the other person feel important and do it sincerely.

Smile, smile, smile 🙂

AngularJS directive multiple element

How to get AngularJS directive multiple element

You probably know there exists opening ng-repeat-start and finishing directive ng-repeat-end like:

<ul>
 <li ng-repeat-start="user in users">
   {{user.firstName}}
 </li>
 <li ng-repeat-end>
   {{user.firstName}}
 </li>
</ul>

You would think it is a specially made directive that works that way but actually it is not. It is part of any directive so you can use it inside your too. When you create new directory and inside you factory function you need to return an object with multiElement options set to true. This way it will behave same as ngRepeat directive over multiple non nested fields. Small excerpt from ngRepeat.js file denoting this:

var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
  ...
  return {
    restrict: 'A',
    <strong>multiElement: true,</strong>
    transclude: 'element',
    priority: 1000,
    terminal: true,
    ...
   }
}];

From native angularJS directive there are few more directives that support multi element spanning. They are ngIf, ngShow, ngHide and ngSwitch. So by adding multiElement to your custom directive you can make to transclude over angularjs directive multiple elements at the same time. This also comes handy because you can do nesting of multiple elements if they are contained inside another one.

How to record iPhone screen

To record iPhone screen has never been easier

Developing great new iOS application requires not just a usable application, but also a great video presentation of it. How it works, basic usability tricks to make users want to get your new application which you spent numerous hours to make it perfect.

If you are working alone on next big thing or inside a small agency or team and you probably have a limited budget to outsource your video production one of the hardest parts was shooting the actual content from iOS device, whether it is iPhone or iPad. Until now you could use some kind of recording of iOS simulator or using airplay method to sync the video. It worked but it was somehow clunky experience and you needed to buy extra software.

With the release of Mac OS Yosemite version everything has changed. Now you can record you iOS device screen directly without buying additional software whatsoever. All you need to have the computer upgraded to Yosemite version and an iPhone or iPad to latest iOS 8. iOS device needs to connect to your computer through lighting cable.

Continue reading “How to record iPhone screen”

AngularJS and Ruby on Rails work together

Finding the best integration of AngularJS and Ruby on Rails

Recently I got really excited with AngularJS so to make it work perfectly with Ruby on Rails there are some configurations needed. There are available blog posts on how to integrate it perfectly but somehow I wasn’t happy with the available preferences. Some offered to add the javascript files manually to the project and to manual project organization, others offered some kind of gem packager or even automated as a rails app template.

My goal is to describe how to start new rails app project from the scratch but the instructions should be succinct enough to be able to reuse them for the existing project (Actually I did extract it from the existing application I am working on). For the front end development I recently discovered great gem that really can make it more closer to pure full stack javascript development.
Bower is a great javascript package manager by the people who are working on Twitter Boostrap. It is like Bundler but made for javascript instead of ruby language. When I found out that there is a ruby gem that is integrated with rake tasks so I can easily update all javascript libraries without needing adding gem library for each one. The gem is called bower-rails.

My initial plan is to evolve this post into a series of blog posts on how to develop a fully functional demo application so I’ve included some steps that are might not needed but are good to have. Don’t worry I will provide explanation why I am using each of them.
Here is my plan what I will try to achieve with this series of posts:

  • creating a new demo project with angularJS from scratch, showing all my changes along the way, and trying to explain every step. this will include creating basic rails 4 app
  • adding basic gems
  • setup front end development with Bower
  • adding angularJS
  • implementing basic Rails and AngularJS controllers

Continue reading “AngularJS and Ruby on Rails work together”

Four Questions About Leadership

I hear four questions asked about leadership often. This article gives a short answer to each of these important questions.

Why Does Leadership Matter?

Parents universally hope that their children develop leadership qualities. They know that leaders are people who are effective in what they do, are respected by others, and typically rewarded for those skills in a variety of ways. It is in these formative years that, through our parents, we first see leadership as desirable and important.

As young people we look up to people around us that motivate and listen to us people that seem like real-life heroes. We consider these people leaders.

As we grow we begin to relate leaders to their jobs and ministers, teachers, police officers. And later Mayors, Presidents, and CEO’s…

As adults all of these thoughts and experiences define why we think leaders have desirable traits and play roles we admire (and why we desire these things for our children).

All of these experiences and thoughts help us define why leadership matters and it matters because leaders make a difference and can shape the future. It matters because leaders are valued and valuable. In everyone’s mind leadership, especially when it is good, matters. Continue reading “Four Questions About Leadership”

Ambitions

I aim to become the president of my country. I have the object of becoming the greatest scientist. I will one day be the richest person in the world. I aim to and so goes the list of ambitions of people. Nobody remembers that the final goal for each one of us is going back to earth. Let us talk more about ambitions.

Are ambitions good or bad? This is difficult to answer, isn’t it? To be an ambitious person must be very good. With ambitions a person strives to achieve a great feat. Few of us have very big ambitions and few very small. It all depends on our contentment. What will make us feel happy? What will make us feel worthy, and what will make us feel powerful? It’s all about what we want from life. If you want money at any cost, you will compromise with all other values and try to make more money. But if your ambition is to become an honest person and live a God fearing life, no amount of money can attract you to do any wrongs.

Ambitions therefore depend upon our character, culture, mental makeup, outlook, values and so on. Till our ambitions don’t trouble others it is ok. If by achieving our goals, we make others happy, that is still better. But if our ambitions hurt others, we must revisit our thinking and redefine our ambitions.