我有这个指令试图在范围内观察json对象的变化。使用基于restangular的服务检索JSON对象,但不知何故$ watch似乎只执行一次,记录'undefined'。
该指令在app的index.html中使用,所以我怀疑这与控制器只适用于特定的视图或表单...有没有办法让指令看到这些更改?
更新:想通过我可以从指令本身调用TextsService,似乎是一个很好的解决方案。如果有人有更好的建议,我会欢迎他们。
服务:
angular.module('main').service('TextsService', function(Restangular) {
this.getTexts = function(jsonRequestBase, jsonRequest, callback) {
Restangular.one(jsonRequestBase, jsonRequest).get().then(
function(texts) {
callback(texts);
}
);
};
});
呼叫控制器:
TexstService.getTexts("content", "file.json", function (texts) {
$scope.mytest = texts;
});
指令:
app.directive('myDirective',
function() {
return {
restrict: 'A',
templateUrl:'test.html',
transclude: true,
link: function(scope, elm, attrs) {
scope.$watch('mytest', function(){
console.log(scope.mytest);
}, true);
答案 0 :(得分:0)
我想我可以从指令本身调用TextsService,似乎是解决问题的好方法。如果有人有更好的建议,我会欢迎他们。
答案 1 :(得分:0)
在接收之前创建带有null的变量。也许这很有效。
答案 2 :(得分:0)
问题在于您的指令范围不了解mytest
变量。定义指令时需要定义绑定:
app.directive('myDirective',
function() {
return {
scope: {
myDirective: '='
},
restrict: 'A',
templateUrl:'test.html',
transclude: true,
link: function(scope, elm, attrs) {
scope.$watch('myDirective', function(newVal){
console.log(newVal);
}, true);
};
}
);
这将获得分配给指令属性的任何变量,并观察它的'值。
您在视图中的指令应该像这样将它绑定到' mytest':
<div my-directive="mytest"></div>