0

这是问题所在:我在应用程序配置中指定了路由,例如:

when('/url', {
    controller: 'Controller',
    templateUrl: 'url'
  });

在我看来,我只有:

<div ng-view my-directive="fire()"></div>

重要的是没有 'ng-controller="MyController"' 属性。当用户加载 url 时,控制器触发并且模板被模型数据填充并呈现良好。

然后我有一个必须在同一页面上执行以下操作的指令:当我单击时,“控制器”必须执行该功能,获取数据并添加渲染模板/将数据添加到现有的。

该指令是:

myAppModule.directive('myDirective', function() {
  return {
    restrict: 'A',
    templateUrl: 'url',
    replace: false,
    link: function(scope, element, attrs) {
        var raw = element[0];

        element.bind('click', function() {

                console.log('loaddata');
                scope.$apply(attrs.fire);

        });
      }

  };
});

console.log 正在触发,但scope.$apply(attrs.fire)- “控制器”内的 fire() 函数没有。关键提示是:如果我在 html 中添加 ng-controller="Controller" 它将起作用,但在页面加载时会触发两次。那么如何告诉指令在不使用 ng-controller="Controller" 的情况下执行“Controller”触发方法?

4

1 回答 1

0

您可以使用scope.$eval()它,它将调用该方法。

link: function(scope, element, attrs) {
    var raw = element[0];
    var func = attrs.myDirective;   // gets the value fire()

    element.bind('click', function() {
            console.log('loaddata');
            scope.$eval(func);

            // you shouldn't need to call $apply here
            // since func will be executed within the 
            // controller
    });
}
于 2013-05-02T17:03:36.407 回答