2014-10-26 33 views
0

我有一個簡單的指令,它包含在它這個輸入元素的HTML模板:沒有數據指令的範圍之間的結合,它的模板

<input type="text" placeholder="Search" class="form-control" ng-model="searchValue" ng-keyup="keyup($event, searchValue)"> 

這裏是指令js文件:

define(['angular', 'module'], function (angular, module) { 
    'use strict'; 

    var templateUrl = module.uri.replace('.js', '.html'); 

    angular.module('App.directives') 
     .directive('navBar',[function() { 
      return { 
       scope: { 
        options: '=options' 
       }, 
       restrict: 'E', 
       replace: 'true', 
       templateUrl: templateUrl, 
       link: function($scope, elem, attrs) { 
        $scope.$watch('options', function (val) { 
         var options = $scope.options || {}; 

         if(options.search) { 
          $scope.searchValue = options.search.initValue || ''; 

          $scope.keyup = function(e, value) { 
           options.search.onSearch(e, value); 
          } 
         } 
        }); 
       } 
      } 
     }]); 
}); 

我的問題是控制器不在視圖上呈現模型值。

看看這個fiddle

+0

我不知道你在這裏問什麼......你期望看到$ scope.message呈現在某個地方嗎? – coma 2014-10-26 21:42:47

+0

@coma,見範圍(第21行)的「blarg」值,它不會改變視圖(在模板中搜索「{{blarg}}」)。 – vlio20 2014-10-26 21:45:02

+1

啊,好的,你說的是鏈接功能... – coma 2014-10-26 22:02:14

回答

1

我還不太清楚,如果這是你的尋找:

http://jsfiddle.net/coma/8d5fj8Lo/2/

app.directive('test', function() { 
    return { 
     restrict: 'E', 
     template: '<div><input type="text" placeholder="Search" class="form-control" ng-model="searchValue"><span>{{blarg}}, {{searchValue}}</span></div>', 
     replace: true, 
     link: function ($scope, elem, attrs) { 

      $scope.$watch('searchValue', function (n, o) { 

       if (n === o) { 

        return; 
       } 

       $scope.blarg = n + 'fooo'; 
      }); 
     } 
    }; 
}); 

所以基本上,而不是聽的keyup事件,並傳遞到聽者的searchValue,只是看它。

我刪除了$選項,因爲它在那裏什麼都沒做。

+0

爲什麼我需要使用手錶?爲什麼範圍和視圖之間沒有2路數據綁定? – vlio20 2014-10-26 22:14:22

+0

更多我需要知道哪個鍵被按下,因此我需要該事件。 – vlio20 2014-10-26 22:24:09

+0

http://jsfiddle.net/coma/8d5fj8Lo/4/ – coma 2014-10-26 22:33:12

相關問題