2014-07-23 72 views
0

我想操縱發送給我的指令的數據,即。我有一個顯示的用戶名和使用這樣的MYUSER指令:如何操作隔離的範圍輸入變量?

<my-user id="25" name="John Doe"></my-user> 

我想它轉換爲:

<a ng-click="navTo('/user/25')">John&nbsp;Doe</a> 

所以我想用&nbsp;和一套更換任何空間根據用戶的ID確定新的位置。這裏是我的指令定義:

angular.module('myApp').directive('myUser', function ($location, $log) { 
    return { 
     restrict: 'EA', 
     scope: { 
      id: '@', 
      name: '@' 
     }, 
     template: '<a ng-click="navTo(\'/users/\' + {{id}})">{{name}}</a>', 
     controller: function ($scope) { 
      $scope.name.replace(' ', '&nbsp;'); 
     }, 
     link: function (scope, element, attrs, fn) { 
      scope.name.replace(' ', '&nbsp;'); 

      scope.navTo = function (route) { 
       $log.info('Navigating to ' + route); 
       $location.path(route); 
      }; 

     } 
    }; 
}); 

然而,替換不會發生。我假設控制器和鏈接函數都在模板渲染後執行。

此外,navTo函數返回以下錯誤:

Error: [$parse:syntax] Syntax Error: Token 'id' is unexpected, expecting [:] at column 21 of the expression [navTo('/users/' + {{id}})] starting at [id}})]. 

如何解決這個任何想法,將不勝感激。

+0

你不需要'{{}}''左右id'。 –

+0

我們沒有{{}}值不會插值,它會給字符串'id'而不是值25 –

+0

@AnthonyChu - 很好,它沒有{{}}工作。任何想法爲什麼替換不起作用? – Onestone

回答

0

只是下面一行替換您的模板,它應該工作

template: '<a ng-click=\'navTo("https://stackoverflow.com/users/{{id}}")\'>{{name}}</a>', 
+0

謝謝!我玩了一些,這個版本適用於我:'模板:'{{name}}',' – Onestone

+0

這是行不通的。輸出'導航到/ users/{{id}}'(ng-click不支持插值)... http://jsfiddle.net/9vFrA/ –

0

ng-click需要一個表達,不需要插值,所以你不需要使用{{}}。你可以刪除它們,像這樣...

template: '<a ng-click="navTo(\'/users/\' + id)">{{name}}</a>' 

Live Demo - Fiddle