2016-04-28 51 views
2

在以下程序中,功能應該如下 - >控制器,指令控制器,編譯,鏈接。但是,編譯函數似乎有一些錯誤。控制器,指令控制器,編譯,鏈接 - 工作流程(編譯功能不起作用)

<html> 
<head> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js" ></script> 
</head> 
<body ng-app="myApp" ng-controller="myCtrl"> 
<people></people> 
<script> 
//1 module declaration 
var app = angular.module("myApp",[]); 
//3 controller declaration 
app.controller('myCtrl',function($scope){ 
    //before going to directive 
    $scope.name = "One"; 
}); 
//5 directives declaration 
app.directive('people',function(){ 
    return{ 
     restrict: 'E', 
     template: '<div>{{name}}</div>', 
     //before compilation 
     controller: function($scope, $element){ 
      $scope.name = $scope.name + "Two"; 
     }, 
     compile: function($scope, $element){ 
      $scope.name = $scope.name + "Three"; 
     }, 
     //after compilation 
     link: function($scope, el, attr){ 
      $scope.name = $scope.name + "Four" 
     } 
    } 
}); 
</script> 
</body> 
</html> 

後市展望:

OneTwoThreeFour 

結果

OneTwo 

但是,如果我從指令取出編譯功能,我得到以下結果:

OneTwoFour 

有什麼不對的編譯功能,它並沒有在$ scope.name呈現「三化」?從Angular documentation採取

+1

希望這不應該是一個問題,在你的代碼,但這裏的拼寫錯誤限制:'E',' –

+0

Nopse,抱歉是錯字。 – Deadpool

+0

下面的答案有幫助嗎?讓我知道你是否需要任何進一步的信息。 – carlcheel

回答

2

片斷:僅當沒有定義屬性編譯

鏈路屬性被使用。做一些前期和後期編輯,返回你的編譯功能如下:

function compile(tElement, tAttrs, transclude) { 
    return { 
     pre: function preLink(scope, iElement, iAttrs, controller) { ... }, 
     post: function postLink(scope, iElement, iAttrs, controller) { ... } 
    } 
} 

的$ scope變量在編譯功能無法使用,而無需使用預鏈接或postLink。

function compile(tElement, tAttrs, transclude) { ... } 
  • tElement - 模板元素 - 在該指令已申報的元素。僅對元素和子元素進行模板轉換是安全的。

  • tAttrs - 模板屬性 - 在此元素上聲明的屬性的規範化列表在所有指令編譯函數之間共享。

  • transclude - 一個transclude鏈接功能已廢棄!]:功能(範圍,cloneLinkingFn)

下面就來演示一個例子:https://plnkr.co/edit/CCnLFJX8D7sbKobuF1GS?p=preview

+0

賓果.....這就是我期待的! – Deadpool

相關問題