我的指令的链接函数中的$ watch未更新

时间:2013-07-12 08:28:18

标签: angularjs angularjs-directive angularjs-scope

我有这个指令试图在范围内观察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);

3 个答案:

答案 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>