Angular js,在指令中调用模块控制器的方法,默认情况下不会看到它的范围

时间:2013-05-02 15:14:44

标签: javascript angularjs

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

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

在视图中我只有:

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

重要的是没有'ng-controller =“MyController”属性。 当用户加载url时,控制器触发,模板填充模型数据并很好地渲染。

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

指令是:

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) - “Controller”中的fire()函数没有触发。主要提示是: 如果我在html中添加ng-controller =“Controller”它将起作用,但是当页面加载时将触发两次。 那么如何告诉指令在不使用ng-controller =“Controller”的情况下执行“Controller”火灾方法?

1 个答案:

答案 0 :(得分: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
    });
}