Javascript 将服务变量绑定到指令?
我有一个控制器,它包含一个从服务器获取数据的函数。我将该数据存储在服务变量中。然后将此服务注入到指令中。我希望指令在调用此函数并更新数据时自动更新 我的控制器:Javascript 将服务变量绑定到指令?,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我有一个控制器,它包含一个从服务器获取数据的函数。我将该数据存储在服务变量中。然后将此服务注入到指令中。我希望指令在调用此函数并更新数据时自动更新 我的控制器: angular .module('myApp') .controller('myCtrl', ['$scope', 'SomeService', function($scope, SomeService) { $scope.update = function() { SomeService.myValue = 1
angular
.module('myApp')
.controller('myCtrl', ['$scope', 'SomeService', function($scope, SomeService) {
$scope.update = function() {
SomeService.myValue = 100;
}
}]);
...
scope.myVar = myService.myVar;
...
...
scope.myValue = myService.myObj;
...
该指令:
angular.module('myApp')
.directive('myDirective', ['SomeService', function(SomeService) {
return {
templateUrl : 'views/myDirective.html',
restrict : 'E',
scope : false,
controller : function($scope) {
this.myValue = SomeService.myValue;
}
};
}]);
angular.module('myApp')
.directive('myDirective', ['SomeService', function(SomeService) {
return {
templateUrl : 'views/myDirective.html',
restrict : 'E',
scope : false,
controller : function($scope) {
this.SomeService = SomeService;
}
};
}]);
模板:
<div>
{{ myValue }}
</div>
<div>
{{ SomeService.myValue }}
</div>
{{myValue}}
单击按钮时调用更新函数,它将myValue更新为新值。我希望它能自动反映在指令中
Plunk:您可以尝试将服务的引用添加到指令本身 该指令:
angular.module('myApp')
.directive('myDirective', ['SomeService', function(SomeService) {
return {
templateUrl : 'views/myDirective.html',
restrict : 'E',
scope : false,
controller : function($scope) {
this.myValue = SomeService.myValue;
}
};
}]);
angular.module('myApp')
.directive('myDirective', ['SomeService', function(SomeService) {
return {
templateUrl : 'views/myDirective.html',
restrict : 'E',
scope : false,
controller : function($scope) {
this.SomeService = SomeService;
}
};
}]);
模板:
<div>
{{ myValue }}
</div>
<div>
{{ SomeService.myValue }}
</div>
{{SomeService.myValue}}
编辑:我检查了你的打劫,终于让它工作了
您可以查看更新的代码请参阅下面的工作演示
var-app=angular.module('app',[]);
应用程序控制器('MainCtrl',函数($scope,SomeService){
$scope.name=SomeService.data;
$scope.update=函数(){
$scope.name.myValue+=1;
}
});
app.factory('SomeService',function()){
风险值数据={
myValue:0
};
返回{
数据:数据
}
});
app.directive('myDirective',['SomeService',
功能(服务){
返回{
templateUrl:'myDirective.html',
限制:“EA”,
范围:假,
链接:功能(范围、要素、属性){
scope.data=SomeService.data
}
};
}
]);代码>
我的值:{{name.myValue}
点击
我的指令
值:{{data.myValue}}
@RutwickGangurde和其他有问题的人,如果您试图设置一个不是对象的范围变量,它将不起作用。我猜这就是您目前在服务中所做的:
...
this.myVar = true;
...
...
this.myObj = {};
this.myObj.myVar = true;
...
然后尝试在指令/控制器中设置它:
angular
.module('myApp')
.controller('myCtrl', ['$scope', 'SomeService', function($scope, SomeService) {
$scope.update = function() {
SomeService.myValue = 100;
}
}]);
...
scope.myVar = myService.myVar;
...
...
scope.myValue = myService.myObj;
...
这对于在服务中获取更新的变量(当它更改时)不起作用
请在您的服务中尝试以下操作:
...
this.myVar = true;
...
...
this.myObj = {};
this.myObj.myVar = true;
...
在指令/控制器中:
angular
.module('myApp')
.controller('myCtrl', ['$scope', 'SomeService', function($scope, SomeService) {
$scope.update = function() {
SomeService.myValue = 100;
}
}]);
...
scope.myVar = myService.myVar;
...
...
scope.myValue = myService.myObj;
...
在您的html中:
...
{{ myValue.myVar }}
...
我本想将此作为一个评论,但我还没有足够的特权,所以决定用一个非常简短的例子作为回应发布。这也是我会做的。没有额外的观察者,只有本地JS对象引用。你能为相同的@RutwickGangurde发布一个plunker吗?试试$scope.SomeService=SomeService代码>这会有什么不同@dfsq??我添加了一个plunker,但它似乎不起作用!谢谢我遵循这个,我可以访问链接函数中的数据。但令人惊讶的是,我在指令中看不到它@Rutwick Gangurde你能告诉我确切的位置吗?还有一件事。。。我没有将控制器显式分配给指令。我在指令中使用的数据是一个对象。我可以在链接功能中看到它。但是当我在指令的模板中使用它时,它是不可见的。@RutwickGangurde现在我完全搞不清楚您在使用代码寻找什么,myValue
可以在指令的链接函数中访问。但是当我在模板中执行{{myValue}}
时,它不会出现。