2014-06-12 192 views
0

我有一個指令,形式給出其餘的html。下面Angularjs範圍問題與指令

該指令被賦予這是指導

<div test 
    input="{{guage.input}}" 
    > 
    </div> 

angular.module('test', []) 

     .directive('test', function() { 
      "use strict"; 

      return { 

       restrict: 'A', 

       scope: { 
        input: '=' 
       }, 

       templateUrl: 'gauge/gauge.tpl.html', 

       replace: true 
    }); 

下面的HTML是指令編譯後加載HTML。

<div ng-controller="Testing"> 
<div> 
    <div id="{{guageid}}" class="gauge ng-isolate-scope" ng-model="gauge.input" data-service="/api/getDataResult/core-mon-status" guageid="fleet_online" description="Fraction of fleet online" unit="%" test="{{gauge.test}}" input="{{gauge.input}}" gauge=""> 
    </div> 
</div> 
</div> 

現在我有一個父控制器上面這個DOM元素名稱是測試。

從我的控制器,如果我更改{{guage.input}}其不顯示。

這是我的控制器

app.controller('Testing',['$scope','newdataLoad','$timeout',function($scope, newdataLoad, $timeout){ 
     $scope.gauge = {}; 
$scope.gauge.input = 0; 
}); 

什麼是我在這裏的範圍問題。

+0

請原諒我的問題,但是'=?'是什麼意思?範圍定義的意思是? –

+0

錯字錯誤! :) – user3711239

回答

1

由於您的範圍定義input=你不需要表達式括號。

<div test input="guage.input"> 

使用表達式括號會打破雙向綁定。


優化:

您可以完全打動你控制器插入指令,仍然使用依賴注入的

"use strict"; 
    angular.module('test', []).directive('test', function() { 
     return {  
      restrict: 'A',  
      scope: { 
       input: '=' 
      },  
      templateUrl: 'gauge/gauge.tpl.html',  
      replace: true, 
      controller: function($scope, newdataLoad, $timeout){ 
       $scope.gauge = {}; 
       $scope.gauge.input = 0; 
      } 
     } 
    }); 

模板代碼,然後:

<div> 
    <div id="{{guageid}}" class="gauge ng-isolate-scope" ng-model="gauge.input" data-service="/api/getDataResult/core-mon-status" guageid="fleet_online" description="Fraction of fleet online" unit="%" test="{{gauge.test}}" input="{{gauge.input}}" gauge=""> 
    </div> 
</div> 
+0

不幸運!!!!!!!! – user3711239

+0

這可能不是* only *的問題,但它肯定是一個。 –

+0

你好,我通過改變來實現它。但是這個指令在多個元素上。即使我們更改特定元素,$ watch也會觸發。 – user3711239

0

刪除捲曲:

<div test input="guage.input"> 
</div>