指令范围与其模板之间没有数据绑定

时间:2014-10-26 21:16:27

标签: javascript angularjs angularjs-directive

我有一个简单的指令,其中包含此输入元素的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

1 个答案:

答案 0 :(得分: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传递给监听器,而只是观看它。

我删除了选项中的$,因为它在那里什么也没做。