0

我正在使用指令從<script>元素讀取json數據,只要我的ng-scope是像data這樣的第一級屬性,此工作正常。出於某種原因,我沒有獲取我的對象的第二層或更深層屬性中的數據,例如data.search。我想這又是一個奇怪的範圍問題,或者我還沒有完全理解。AngularJS指令不設置作用域對象的第二級

爲什麼設置第一級而不是第二級屬性?

Plunker

JS

angular.module('app', [ 

]); 

angular.module('app').directive('jsonData', [function() { 
     return { 
       restrict: 'A', 
       link: function (scope, element, attributes, controller) { 
         scope[attributes.ngModel] = JSON.parse(element.html()); 
       } 
     }; 
}]); 

angular.module('app').controller('TestController', [ 
    '$scope', 
    function ($scope) { 

     $scope.searchTest = {}; 

     $scope.data = { 
      search: { 
      } 
     }; 
    }]); 

標記:

<head> 
    <link rel="stylesheet" href="style.css"> 
    <script src="http://apps.bdimg.com/libs/angular.js/1.4.0-beta.4/angular.min.js"></script> 
    <script src="script.js"></script> 
    </head> 

    <body ng-controller="TestController"> 

     <style> 
      pre { border: 1px solid red; padding: 5px ;} 
     </style> 

     <h3>2nd level</h3> 
     <script type="application/json" json-data ng-model="data.search"> 
      {"price_from":"3","price_to":"412"} 
     </script> 
     <pre>{{data.search | json}}</pre> 

     <h3>1st level</h3> 
     <script type="application/json" json-data ng-model="data"> 
      {"price_from":"3","price_to":"412"} 
     </script> 
     <pre>{{data | json}}</pre> 
    </body> 

</html> 
+0

我認爲第二次調用指令(第一級)會覆蓋所有的數據對象... – Kinnza

+0

另外一些'scope [attributes.ngModel]'是不正確的。 它會轉化爲範圍['data.search'],我認爲這是不同的scope.data.search – Kinnza

+0

爲什麼你會需要這樣做?你想解決什麼問題? – charlietfl

回答

0

感謝@Kinnza誰想通了,因爲我發現在角做這件事的辦法:我把它換成

scope[attributes.ngModel] = JSON.parse(element.html()); 

$parse(attributes.ngModel).assign(scope, JSON.parse(element.html())); 

,而且運作良好現在。

0

首先將指令更改爲如下所示: var text ='scope。'+ attributes.ngModel +'='+ element.html(); (文字); eval(text);

林不知道它的最好的方式,但它會更好地工作,然後選擇範圍[attributes.ngModel]

爲了使它不覆蓋所有的目標,你需要比分配對象以外的東西。 下劃線_.extend可以工作。