2

これは、この質問のフォローアップです。私は同じ設定をしています:

角度範囲はすべてのモジュールとコントローラーで共有されます

ルートモジュール、コントローラー、ディレクティブです。今質問に:

私はこれが内部に書かれているサービスを持っています:

firstModule.factory("firstService", function () {
   return {   
       $('.mainitems').click(function () {               
            alert("hi")
        });
   };
});

そして、他のディレクティブ内にネストされたディレクティブ:

    secondModule.directive("secondDirective", function () {
    return {
        templateUrl: "./myurl",
        restrict: "E",
        replace: true,
        compile: function (tElement, tAttrs, controller) {
            return {

            }
        }
    }
});

行がある場合 : restrict: "E"、クリック機能は機能しませんが、削除すると機能します。

これが問題になる理由は何ですか?それは奇妙なことです.1日のデバッグの後、私は問題を見つけました.

4

2 に答える 2

2

実際、ファクトリで dom 操作を管理するのは悪いパターンです。すべての DOM 操作はディレクティブに配置する必要があるため、クリックの場合はng-click

例えば ​​:

<div ng-controller="MyController">
    <div ng-click="click()"></div>
</div>

click() はスコープの関数です。したがって、コントローラーは次のようになります。

secondModule.controller('MyController', function($scope){

    $scope.click = function(){
      //do what you want
    };

});

divをクリックすると、コントローラーでクリック関数が呼び出されます

ディレクティブは次のようにする必要があります。

secondModule.directive("secondDirective", function () {
return {
    template: "<div ng-click='click()'><a>Click here</a></div>",
    restrict: "E",
    replace: true,
    link: function (tElement, tAttrs, controller) {
    }
}
});

そして、あなたはそのようにhtmlします:

<second-directive></second-directive>

plunkr の作業はこちら : http://plnkr.co/edit/DmkQTp?p=preview

于 2013-09-25T14:08:10.673 に答える
1

restrict: "E"(要素) を構成オプションとして指定すると、このディレクティブが適用されるように、ng次のようなカスタム タグが必要になります。<second-directive></second-directive>これを削除すると、デフォルトで"A"(attribute) になります。これは、このディレクティブを適用する宣言として使用している可能性があります。

于 2013-09-25T14:13:05.487 に答える