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}}
时,它不会出现。