2014-02-05 6 views
3

В моем корнеплоде есть общая функция. У меня есть несколько контроллеров, которые используют одну и ту же функцию.Угловая переменная переменная Scope от функции Rootscope - как это сделать?

Мне нужно изменить переменную Scope от функции Rootscope.

http://jsfiddle.net/qkZHG/

В JS

angular.module('myApp', []) 
.run(function($rootScope) { 
$rootScope.rs = new Date(); 

$rootScope.changeRsFromRs = function() { 
    $rootScope.rs = new Date(); 
}; 

//Not Working 
$rootScope.changeSFromRs = function() { 
    $scope.s = new Date(); 
}; 
}) 
.controller('myCtrl', function($scope, $rootScope) { 
    $scope.s = new Date(); 

    $scope.changeSFromS = function() { 
    $scope.s = new Date(); 
}; 

$scope.changeRsFromS = function() { 
    $rootScope.rs = new Date(); 
}; 
}); 

В Html,

<button class="not-working" ng-click='changeSFromRs()'>Change Scope value from Rootscope</button> 
+0

почему вы думаете, что это должно быть возможно? $ scope не определяется в вашей функции changeSFromRs. – michael

+0

Это невозможно, так как при возврате к корневому объекту контекстная область не определена. Вероятно, то, чего вы хотите достичь, можно сделать с помощью угловых сервисов – V31

ответ

1

Это возможно с помощью этого ключевого слова.

http://jsfiddle.net/qkZHG/3/

В JS:

$rootScope.changeSFromRs = function(scope) { 
    scope.s = new Date(); 
}; 

В HTML:

<button class="not-working" ng-click='changeSFromRs(this)'>Change Scope value from Rootscope</button> 
3

Это, вероятно, не представляется возможным, так как ваш $ rootScope не имеет каких-либо ссылок на сферу, ни в его «означало» сделать это.

Вы можете вводить корневой кодекс $ в ваш контроллер и привязываться к нему, если это помогает.

app.controller('sampleCtrl', function($scope, $rootScope){ 
    $scope.var = $rootScope.var2; 
}); 

Cheers.

2

Почему бы вам просто не вызвать функцию rootScope?

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

myApp.run(function($rootScope) { 
    $rootScope.rs = new Date(); 
    $rootScope.updateDate = function() { 
     $rootScope.rs = new Date(); 
    }; 
}); 

myApp.controller('myCtrl', ['$scope', function($scope){ 
}]); 

Идически это было бы лучше, если бы вы сделали сервис для этого.

myApp.service('DateService', function() { 
     return { 
      getDate: function() { 
       return new Date(); 
      } 
     }; 
    }); 

просмотреть обновленную fiddle

+0

+1 для решения внутри службы ... если возможно, вы всегда должны избегать использования корнеплодов – doodeec

+0

да. Ты прав. его лучше использовать сервис. Но для опубликованного вопроса, см. Мой ответ – Thilaga

Смежные вопросы