2013-01-14 172 views
9

我在我的項目中使用AngularJS,我想嘗試創建指令。我已經跟着幾個教程,我看不出我做錯了什麼。甚至最糟糕的是,它不會顯示任何錯誤或警告消息,但它也不會執行指令的功能。現在,我的代碼是相當多這樣的:AngularJS指令不起作用

angular.module('components', []).directive('ngxOnshow', function() { 
    return { 
      restrict: 'A', 
      link: function(scope, element, attrs){ 
         console.log("hello world") 
         //Resto do código da função 
      } 
    }; 
}); 
var module = angular.module('app', ['components']); 

在HTML頁面的正文我有這樣的:

<body ng-autobind ng-app="app"> 

但後來,當我使用的指令,這是行不通的。

<div ng-show="showApp == true" ngx-onshow="showAppBar()"> 
</div> 

應用程序的其餘部分工作正常,綁定,默認指令,除此之外的所有內容。也許我錯過了什麼?

謝謝, 灼燒:)

+1

它打印出「hello world」給我的控制檯... –

+1

你的錯誤必須在別的地方。我已經將你的確切代碼複製並粘貼到jsFiddle(http://jsfiddle.net/ZDPTJ/1/)中,並在控制檯中看到「hello world」。 – Lukas

+0

您是否記得將帶有指令代碼的文件添加到index.html中?對不起,但我不得不問 - 忘了那幾次我自己;)我真的只是假設你現在在single.js文件中有所有的代碼,所以它可能是別的。只是一個控制問題:) –

回答

11

使用「&」允許指令執行父範圍定義式/功能。 $觀察內插分離範圍屬性(即,一個具有限定「@」包含{{}}),以確定當它改變:

myApp.directive('ngxOnshow', function() { 
    return { 
    restrict: 'A', 
    scope: { 
     showApp: '@', 
     ngxOnshow: '&' 
    }, 
    link: function (scope, element, attrs) { 
     console.log("inside link function") 
     attrs.$observe('showApp', function (newValue) { 
     newValue === "true" && scope.ngxOnshow() 
     }) 
    } 
    }; 
}); 

因爲內插的值始終爲字符串NEWVALUE與"true"true比較。

HTML:

<div ng-show="showApp == true" show-app="{{showApp}}" ngx-Onshow="showAppBar()"> 

Fiddle

0

我真的不知道該指令應該做的,因爲你已經是一個console.log。但是,由於您將一個函數傳遞給了ngxOnshow參數,我想您想執行它。你需要告訴該指令從父與scope集執行功能&

angular.module('components', []).directive('ngxOnshow', function() { 
    return { 
      restrict: 'A', 
      scope: { 
      ngxOnshow: '&' 
      }, 
      link: function(scope, element, attrs){ 
         console.log("hello world") 
         //Resto do código da função 
      } 
    }; 
}); 
+0

嗨,謝謝,我不知道。但不幸的是,問題不是這樣,因爲它仍然不起作用,它仍然不顯示日誌消息。 :( –

6

大部分指令的錯誤顯示在控制檯上,只啓用日誌記錄:

app.config(function($logProvider){ 
    $logProvider.debugEnabled(true); 
}); 

因此你沒有必要去猜測爲什麼指令豈不等於工作。

相關問題