2016-07-14 160 views
0

非常新的角;试着理解为什么这个指令不起作用。请向我指出有关学习什么概念的方向。指令:控制器不是功能

该指令正在,当我不得不写出来模板作为一个字符串,但它是非常难看,我想将它们放在一个单独的HTML文件。

index.html中

<div message-modal trigger="trigger_message_modal"></div> 

错误消息$scope.trigger_message_modal is not a function

的不工作directives.js

app.module.directive('messageModal', function ($compile) { 
    return { 
     scope: { 
      trigger: "=trigger" 
     }, 
     controller: ['$scope', '$element', '$attrs', '$timeout', function ($scope, $element, $attrs, $timeout) { 

       $scope.trigger = function(title, message, modal_class, color, auto_hide){ 
        $scope.message = message; 
        $scope.modal_class = modal_class; 
        $scope.color = color; 
        $scope.title = title; 

        $('#messageWell').modal('show'); 

        if(auto_hide == true){ 
         $timeout(function(){ 
          $('#messageWell').modal('hide'); 
         }, 1000) 
        } 
       }; 
     }], 
     restrict: "E", 
     templateUrl :"well.html"       
    }; 
}); 
+1

'$ scope.trigger_message_modal'从哪里触发?在指令控制器被实例化之前,这个函数是否会触发定时问题? – jchen86

回答

0

该指令被限制到E,这意味着应该指令被用作元素, <message-modal trigger="trigger_message_modal"> </message-modal>。只有这样trigger属性才能在指令中使用该指令的作用域。 如果您需要使用message-modal作为属性,则将限制更改为A,但您将无法访问trigger作为范围变量,需要使用父元素的$attrs访问。

+0

为什么在使用限制“A”时无法访问'trigger'? – Icycool

+0

'trigger'不能在其范围内访问。只能从父属性访问。编辑了我的答案以清楚说明。 – rraman

+0

我尝试使用两个,他们几乎一样[jsbin](https://jsbin.com/sutedunoxo/edit?html,js,output) – Icycool

相关问题