2014-02-05 49 views
3

我的根視鏡有一個共同的功能。我有多個使用相同功能的控制器。Rootscope函數的角度變化範圍變量 - 如何做到這一點?

我需要從Rootscope函數中更改Scope變量。

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

這是不可能的,因爲當您返回到rootScope時,上下文範圍未定義。可能你想要達到的效果可以通過使用角度服務 – 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沒有範圍的任何提及,也不是「意味着」要這樣做。

您可以將$ rootscope注入您的控制器並綁定到它,如果有幫助的話。

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

乾杯。

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來解決服務中的問題......如果可能的話,你應該總是避免使用rootscope – doodeec

+0

是的。你是對的。它更好地使用服務。但對於發佈的問題,請參閱我的答案 – Thilaga