Search code examples
angularjsangularjs-directivewatchangularjs-watch

AngularJS : $watch within directive is not working when $rootScope value is changed


I have created an application is angularjs in which i am having a directive, i am ahving a watch within the directive to trigger some methods within the directive when there is a change in $rootScope variable, but the problem is when the $rootScope.name value is changed the watch which is within the directive is not working

My code is as given below

Working Demo

var module = angular.module('myapp', []);

module.controller("TreeCtrl", function($scope, $rootScope) {
    $scope.treeFamily = {
        name : "Parent"
    };

    $scope.changeValue = function()
    {
        $rootScope.name = $scope.userName;
    };

});

module.directive("tree", function($compile) {
    return {
        restrict: "E",
        transclude: true,
        scope: {},
        template:'<div>sample</div>',
        link : function(scope, elm, $attrs) {
           function update()
           {
           };
           scope.$watch('name', function(newVal, oldVal) {
                console.log('calling');
               update();
            }, true);
        }
    };
});

Solution

  • i have corrected it. for working fiddle

    <div ng-app="myapp">
      <div ng-controller="TreeCtrl">
        <input type="text" ng-model="userName"/>
        <button ng-click="changeValue()">Change</button>
        <tree name="name">
        </tree>
      </div>
    </div>
    
    
    
    module.directive("tree", function($compile) {
      return {
        restrict: "E",
        transclude: true,
        scope: {
            name: '='
        },
        template:'<div>sample</div>',
        link : function(scope, elm, $attrs) {
           function update()
           {
           };
           scope.$watch('name', function(newVal, oldVal) {
                console.log('calling');
               update();
            }, true);  
        }
      };
    });